ไม่สามารถตอบสนองข้อ จำกัด พร้อมกันได้จะพยายามกู้คืนโดยการทำลายข้อ จำกัด


145

ด้านล่างเป็นข้อความแสดงข้อผิดพลาดที่ฉันได้รับในพื้นที่แก้ไขข้อบกพร่อง มันทำงานได้ดีและไม่มีอะไรผิดปกติยกเว้นว่าฉันได้รับข้อผิดพลาดนี้ สิ่งนี้จะป้องกันไม่ให้แอปเปิ้ลยอมรับแอปหรือไม่ ฉันจะแก้ไขได้อย่างไร

2012-07-26 01:58:18.621 Rolo[33597:11303] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x887d630 h=--& v=--& V:[UIButtonLabel:0x886ed80(19)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x887d5f0 h=--& v=--& UIButtonLabel:0x886ed80.midY == + 37.5>",
    "<NSAutoresizingMaskLayoutConstraint:0x887b4b0 h=--& v=--& V:[UIButtonLabel:0x72bb9b0(19)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x887b470 h=--& v=--& UIButtonLabel:0x72bb9b0.midY == - 0.5>",
    "<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>",
    "<NSLayoutConstraint:0x72c2430 UILabel:0x72bfad0.top == UILabel:0x72bf7c0.top>",
    "<NSLayoutConstraint:0x72c2370 UILabel:0x72c0270.top == UILabel:0x72bfad0.top>",
    "<NSLayoutConstraint:0x72c22b0 V:[UILabel:0x72bf7c0]-(NSSpace(8))-[UIButton:0x886efe0]>",
    "<NSLayoutConstraint:0x72c15b0 V:[UILabel:0x72c0270]-(NSSpace(8))-[UIRoundedRectButton:0x72bbc10]>",
    "<NSLayoutConstraint:0x72c1570 UIRoundedRectButton:0x72bbc10.baseline == UIRoundedRectButton:0x7571170.baseline>",
    "<NSLayoutConstraint:0x72c21f0 UIRoundedRectButton:0x7571170.top == UIButton:0x886efe0.top>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>

Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

1
ข้อผิดพลาดนี้จะเกิดขึ้นใน Xcode 4.5 ดังนั้นคุณจึงไม่สามารถส่งไปยังที่ App Store แล้วล่ะค่ะ (จนกว่าจะมีการปล่อยตัว)
borrrden

ดังนั้นจะไม่มีอะไรผิดปกติ? และเป็นไปได้ไหมที่จะใช้ xcode รุ่นอื่นเพื่อส่งไปยัง app store
Johnny Cox

1
ใช่มีบางอย่างผิดปกติ แต่ไม่เกี่ยวข้องเพราะเกี่ยวข้องกับคุณสมบัติของ iOS ที่ยังไม่พร้อมใช้งานในรุ่น Xcode สาธารณะ ถ้ามันรวบรวมกับ 4.4 คุณสามารถปล่อยมันโดยใช้รุ่นนั้น (มันได้รับการปล่อยตัวในวันนี้)
borrrden

ฉันได้รับข้อความแสดงข้อผิดพลาดนี้สำหรับแอพ OS X ใน Xcode 4.4 ฉันไม่เข้าใจ
Steve McLeod

@ BartłomiejSemańczykคุณมีโอกาสได้เข้าร่วมห้อง: chat.stackoverflow.com/rooms/92522/autolayout-and-iosหรือไม่? ขออภัยที่สุ่ม แต่จะขอบคุณคำแนะนำของคุณเกี่ยวกับรูปแบบอัตโนมัติที่เกี่ยวข้องขอบคุณ!
cheznead

คำตอบ:


275

ผมอยากจะแนะนำให้แก้ปัญหาและหาที่ จำกัด คือ"คนที่คุณไม่ต้องการ" สมมติว่าคุณมีปัญหาต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ปัญหาอยู่เสมอคือวิธีค้นหาข้อ จำกัด และมุมมองต่อไปนี้

วิธีแก้ไขมีสองวิธีดังนี้:

  1. DEBUG VIEW HIERARCHY (อย่าแนะนำวิธีนี้)

เนื่องจากคุณรู้ว่าจะหาข้อ จำกัด ที่ไม่คาดคิดได้อย่างไร (PBOUserWorkDayHeaderView) มีวิธีการทำเช่นนี้ค่อนข้างดี ให้ค้นหาUIViewและNSLayoutConstraintในสี่เหลี่ยมสีแดง เนื่องจากเรารู้ว่าid ในหน่วยความจำมันค่อนข้างง่าย

  • หยุดแอปโดยใช้ลำดับชั้นการดู Debug :

ป้อนคำอธิบายรูปภาพที่นี่

  • ค้นหา UIView ที่เหมาะสม:

ป้อนคำอธิบายรูปภาพที่นี่

  • ต่อไปคือการหาข้อ จำกัด NSLayout ที่เราสนใจ:

ป้อนคำอธิบายรูปภาพที่นี่

อย่างที่คุณเห็นตัวชี้หน่วยความจำเหมือนกัน ดังนั้นเราจึงรู้ว่าเกิดอะไรขึ้นตอนนี้ นอกจากนี้คุณสามารถค้นหาNSLayoutConstraintในลำดับชั้นการดู เนื่องจากถูกเลือกในมุมมองจึงเลือกในนาวิเกเตอร์ด้วย

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณต้องการคุณสามารถพิมพ์บนคอนโซลโดยใช้ตัวชี้ที่อยู่:

(lldb) po 0x17dce920
<UIView: 0x17dce920; frame = (10 30; 300 24.5); autoresize = RM+BM; layer = <CALayer: 0x17dce9b0>>

คุณสามารถทำเช่นเดียวกันสำหรับทุกข้อ จำกัด ที่ดีบักเกอร์จะชี้ไปที่ :-) ตอนนี้คุณตัดสินใจว่าจะทำอย่างไรกับสิ่งนี้

  1. พิมพ์ได้ดีกว่า (ฉันแนะนำวิธีนี้จริง ๆ นี่คือ Xcode 7)

    • ตั้งค่าตัวระบุที่ไม่ซ้ำกันสำหรับทุกข้อ จำกัด ในมุมมองของคุณ:

ป้อนคำอธิบายรูปภาพที่นี่

  • สร้างส่วนขยายอย่างง่ายสำหรับNSLayoutConstraint:

สวิฟท์ :

extension NSLayoutConstraint {

    override public var description: String {
        let id = identifier ?? ""
        return "id: \(id), constant: \(constant)" //you may print whatever you want here
    }
}

Objective-C

@interface NSLayoutConstraint (Description)

@end

@implementation NSLayoutConstraint (Description)

-(NSString *)description {
    return [NSString stringWithFormat:@"id: %@, constant: %f", self.identifier, self.constant];
}

@end
  • สร้างมันอีกครั้งและตอนนี้คุณมีเอาต์พุตที่อ่านได้มากขึ้นสำหรับคุณ:

ป้อนคำอธิบายรูปภาพที่นี่

  • เมื่อคุณได้รับแล้วidคุณสามารถแตะที่ง่าย ๆ ในFind Navigatorของคุณ:

ป้อนคำอธิบายรูปภาพที่นี่

  • และค้นหาได้อย่างรวดเร็ว:

ป้อนคำอธิบายรูปภาพที่นี่

วิธีง่ายๆในการแก้ไขกรณีที่?

  • พยายามเปลี่ยนลำดับความสำคัญเป็น999ข้อ จำกัด ที่เสียหาย

นี่เป็นเพียงการแก้ไขข้อบกพร่องของฉัน ... ขอบคุณมาก คุณจะทำสิ่งนี้เพื่อวัตถุประสงค์ c อย่างไร เพิ่มหมวดหมู่?
cheznead

ขอบคุณสำหรับการแก้ปัญหา แต่ฉันสามารถใช้ส่วนขยายในวัตถุประสงค์ c?
dev.nikolaz

เป็นตัวระบุที่เหมือนกับ accessibilityIdentifier ที่มีอยู่ใน UIViews โดยทางโปรแกรม หากไม่ใช่ตัวระบุสามารถตั้งค่าโดยทางโปรแกรมได้อย่างไร
Arunabh Das

@ อย่าเลยมันไม่เหมือนกัน อ่านคำตอบนี้
BartłomiejSemańczyk

3
ฉันชอบวิธีที่ 2 และฉันคิดว่ามันเป็นวิธีที่ดีที่สุดสำหรับการติดตามข้อ จำกัด ที่ขาด
Antarix

108

ปัญหาที่คุณมีคือ NSAutoresizingMaskLayoutConstraints ไม่ควรอยู่ที่นั่น นี่คือระบบเก่าของสปริงและเสา หากต้องการกำจัดให้เรียกใช้วิธีนี้ในแต่ละมุมมองที่คุณต้องการ จำกัด

[view setTranslatesAutoresizingMaskIntoConstraints:NO];

5
อะไรคือสาเหตุของมุมมองที่ไม่ปรากฏเลยเมื่อตั้งค่า setTranslatesAutoresizingMaskIntoConstraints เป็น NO
topwik

1
ตัวอย่างฉันสร้าง SSBadgeView (UIView) เพิ่ม imageView subView ให้กับ SSBadgeView จากนั้นเพิ่ม SSBAdgeView เป็น subview ให้กับ UIReuseableView ฉันเพิ่มข้อ จำกัด บางอย่างลงใน SSBadgeView และ setTranslatesAutoresizingMaskIntoConstraints: NO บน SSBadgeView subView อิมเมจของ SSBadgeView นั้นถูกจัดวางตามที่คาดไว้ แต่พาเรนต์ SSBadgeView ของอิมเมจนั้นไม่มีที่ให้เห็น
topwik

1
คุณลืมปิดการใช้งาน TranslatesAutoresizingMaskIntoConstraints ในมุมมองย่อยของคุณ
Softlion

นี่คือสิ่งที่เกิดขึ้นเมื่อฉันตั้งค่าคุณสมบัตินี้drive.google.com/file/d/0BxuYs8WHXCF7bV9ndHFrQ0dMYVE/… ฉันใช้รหัสบรรทัดนี้: [self.contentView setTranslatesAutoresizingMaskIntoConstraints: NO]; สำหรับ (UIView * ดูใน self.contentView.subviews) {[ดู setTranslatesAutoresizingMaskIntoConstraints: NO]; ก่อนหน้านี้มันเคยมีลักษณะเช่น: drive.google.com/file/d/0BxuYs8WHXCF7OWlvZGQwN3FlbzQ/… มันใช้งานได้ แต่ฉันต้องบอกว่า
rptwsthi

28

ระวังอย่าใช้มากกว่าหนึ่งข้อ จำกัด ในทิศทางและประเภทเดียวกัน

ตัวอย่างเช่น: ข้อ จำกัด แนวตั้งสำหรับการลาก = 15 และอีกข้อคือ> = 10

บางครั้ง Xcode สร้างข้อ จำกัด บางอย่างที่คุณไม่ได้แจ้งให้ทราบล่วงหน้า คุณต้องกำจัดข้อ จำกัด ที่ซ้ำซ้อนและคำเตือนของบันทึกจะหายไปอย่างแน่นอน

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้คุณสามารถอ่านและตรวจหาสาเหตุบางอย่างได้โดยตรงจากบันทึก :

NSLayoutConstraint: 0xa338390 V: | - (15) - [UILabel: 0xa331260] (ชื่อ: '|': UILabel: 0xa330270)>

สิ่งนี้เราสามารถอ่านได้ว่าเป็นปัญหาในข้อ จำกัด ของ UILabel มันเป็นข้อ จำกัด ในแนวดิ่งที่มีความยาว 15 พอยต์

NSLayoutConstraint: 0x859ab20 H :-( 13) - | [UIView: 0x85a8fb0] ...

นี่จะเป็นข้อ จำกัด ในแนวนอนเป็นต้น


6

ฉันมีข้อยกเว้นเหล่านี้จำนวนมากโยนวิธีที่เร็วและง่ายที่สุดที่ฉันพบในการแก้ไขคือหาค่าที่ไม่ซ้ำกันในข้อยกเว้นที่ฉันค้นหาในซอร์สโค้ดของกระดานเรื่องราว สิ่งนี้ช่วยให้ฉันค้นหามุมมองและข้อ จำกัด จริงที่ทำให้เกิดปัญหา (ฉันใช้ userLabels ที่มีความหมายในทุกมุมมองซึ่งทำให้ง่ายต่อการติดตามข้อ จำกัด และมุมมอง)

ดังนั้นการใช้ข้อยกเว้นข้างต้นฉันจะเปิดกระดานเรื่องราวเป็น "ซอร์สโค้ด" ใน xcode (หรือตัวแก้ไขอื่น) และมองหาสิ่งที่ฉันสามารถหา ...

<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]> 

.. ดูเหมือนว่าข้อ จำกัด ในแนวตั้ง (V) บน UILabel ด้วยค่า (17)

มองผ่านข้อยกเว้นที่ฉันเจอด้วย

<NSLayoutConstraint:0x72c22b0 V:[UILabel:0x72bf7c0]-(NSSpace(8))-[UIButton:0x886efe0]>

ซึ่งดูเหมือนว่า UILabel (0x72bf7c0) อยู่ใกล้กับ UIButton (0x886efe0) ที่มีระยะห่างแนวตั้ง (8) ..

หวังว่าจะเพียงพอสำหรับฉันในการค้นหามุมมองที่เฉพาะเจาะจงในซอร์สโค้ดของสตอรีบอร์ด จากนั้นฉันควรจะสามารถคิดได้ว่ามุมมองใดที่อยู่ในกระดานเรื่องราวซึ่งจะทำให้การระบุปัญหาง่ายขึ้น (มองหาการ "ซ้ำ" หรือการตรึงที่ขัดแย้งกับข้อ จำกัด ด้านขนาด)


"ฉันใช้ userLabels ที่มีความหมาย" - อะไรคือ userLabels ในบริบทนี้ (เช่นวิธีการตั้งค่า)
Stripes

ในส่วนเอกสารของตัวตรวจสอบตัวตนเป็นฟิลด์ "ฉลาก" .. ที่ได้รับการแปลเป็นค่า "userLabel" ในรหัสที่มาของกระดานเรื่องราว
C James

นอกจากนี้คุณยังสามารถตั้งค่าได้โดยคลิกที่มุมมองที่เลือกในแผงด้านซ้ายมือ "ภาพรวม" (เล็กน้อยเช่นเปลี่ยนชื่อไฟล์ในตัวค้นหา)
C James

1
อาจเป็นสิ่งที่ดีที่สุดที่ฉันได้อ่านเกี่ยวกับการแก้ปัญหาที่หวั่นเกรงว่า ความเจ็บปวด ฉันพบว่าวัตถุที่แสดง ณ จุดนี้ "จะพยายามกู้คืนโดยการทำลายข้อ จำกัด <NSLayoutConstraint:" มักเป็นผู้ร้ายและอย่างที่ C James กล่าวว่าอาจเป็นข้อจำกัดความสูงหรือความกว้างที่ขัดแย้งกับข้อ จำกัด ในการตรึง ฉันพบว่ามันยากที่จะลบความสูง แต่เนื่องจากข้อ จำกัด ที่ถูกต้องความสูงสามารถรวบรวมได้จากข้อ จำกัด อื่น ๆ การเพิ่มข้อจำกัดความสูงทำให้สับสนเพียงเลย์เอาต์อัตโนมัติดังนั้นตอนนี้ที่ฉันมองหาอยู่
latenitecoder

6

ฉันมีเวลายากลำบากในการหาข้อ จำกัด ที่ก่อให้เกิดข้อผิดพลาดนี้ นี่เป็นวิธีที่ง่ายกว่าในการทำ

ฉันใช้ Xcode 6.1.1

  1. "Command + A" เพื่อเลือก UILabels, UIImages ทั้งหมด
  2. คลิกตัวแก้ไข -> Pin> (เลือก ... ) เพื่อกำกับ
  3. คลิกตัวแก้ไข -> แก้ไขปัญหาเลย์เอาต์อัตโนมัติ -> เพิ่มข้อ จำกัด ที่หายไปหรือรีเซ็ตเป็นข้อ จำกัด ที่แนะนำ มันขึ้นอยู่กับกรณีของคุณ

5

ฉันมีปัญหานี้เพราะ.xibไฟล์ของฉันใช้การโต้กลับอัตโนมัติ

ในตัวตรวจสอบไฟล์แท็บแรก การยกเลิกการเลือก "ใช้การชำระอัตโนมัติ" แก้ปัญหาได้

ตัวตรวจสอบไฟล์ autolayout


ดังนั้นฉันจึงทำเช่นนั้นและแก้ไขปัญหาได้ แต่ 'UIImageView' ฉันมีที่ด้านบนของหน้าจอ (ซึ่งฉันใช้เป็นแถบนำทาง) ถูกย้ายไปที่ด้านล่างของหน้าจอ คุณรู้ไหมว่าทำไมถึงเกิดขึ้น?
dietbacon

1
Autolayout ใช้ข้อ จำกัดในการควบคุมเค้าโครงของวัตถุ เนื่องจากคุณเพิ่งปิดการใช้งานการชำระอัตโนมัติข้อ จำกัด เหล่านี้ส่วนใหญ่อาจหายไปดังนั้นตำแหน่งของคุณUIImageViewจึงเปลี่ยนไป คุณต้องตั้งตำแหน่งนี้อีกครั้งโดยทางโปรแกรมหรือผ่านเครื่องมือสร้างส่วนต่อประสาน
Stéphane Bruckert

5

นี่คือประสบการณ์และการแก้ไขของฉัน ฉันไม่ได้แตะรหัส

  1. เลือกมุมมอง (UILabel, UIImage ฯลฯ )
  2. ตัวแก้ไข> Pin> (เลือก ... ) เพื่อกำกับ
  3. เครื่องมือแก้ไข> แก้ไขปัญหาการจัดวางอัตโนมัติ> เพิ่มข้อ จำกัด ที่ขาดหายไป

4

ใช้รหัสนี้อย่างรวดเร็ว

view.translatesAutoresizingMaskIntoConstraints = false

1
นี่เป็นคำตอบที่รวดเร็วสำหรับคำถามที่มีแท็ก -c
Tobi Nary

2
@ SmokeDispenser ยังไงก็ตามฉันได้กล่าวว่านี่เป็นรหัสที่รวดเร็ว และมันก็ใช้ได้สำหรับฉัน สวิฟท์ / วัตถุประสงค์มันเป็นโกโก้สัมผัส SDK ทั่วไป
Arun Kumar P

2

ฉันได้ติดตามคำถามและคำตอบ SO จากคำค้นหาแต่ละคำ แต่พวกเขาทั้งหมดมีความเกี่ยวข้องกับเฉพาะ

ที่พื้นฐานฉันหมายถึงก่อนที่คุณจะเขียนรูปแบบ (อาจเป็นแบบง่าย ๆ ) มันจะให้คำเตือน

จาก iOS 8.0 ตามมุมมองเริ่มต้นคือขนาดคลาส แม้ว่าคุณจะปิดใช้งานคลาสขนาด แต่ก็ยังคงมีข้อ จำกัด เลย์เอาต์อัตโนมัติ

ดังนั้นหากคุณวางแผนที่จะตั้งข้อ จำกัด ผ่านรหัสโดยใช้ VFL จากนั้นคุณจะต้องดูแลหนึ่งบรรทัดด้านล่าง

// Remove constraints if any.
[self.view removeConstraints:self.view.constraints];

ฉันมีการค้นหามากใน SO แต่การแก้ปัญหาคือการโกหกในแอปเปิ้ลโค้ดตัวอย่าง

ดังนั้นคุณต้องลบข้อ จำกัด เริ่มต้นก่อนที่จะวางแผนเพิ่มใหม่


1

สำหรับฉันเหตุผลหลักของปัญหานี้คือฉันลืมที่จะยกเลิกการเลือกAutoLayoutในตัวXibแก้ไข ในความเป็นจริงฉันทำการปรับเปลี่ยนXIBรหัสจำนวนมาก


1
 for(UIView *view in [self.view subviews]) {
    [view setTranslatesAutoresizingMaskIntoConstraints:NO];
}

สิ่งนี้ช่วยฉันจับมุมมองทำให้เกิดปัญหา


1

ไม่มีคำตอบข้างต้นที่เป็นประโยชน์ในสถานการณ์ของฉัน ฉันกำลังรัน XCode 10.1 และทดสอบแอพของฉันบนตัวจำลองสำหรับ "iPad (รุ่นที่ 5)" เครื่องมือจำลองกำลังเรียกใช้ iOS 12.1

ฉันมีมุมมองรูทที่เรียบง่ายในสตอรี่บอร์ดของฉันพร้อมกับบทวิจารณ์ UITextField สองรายการ ไม่มีข้อ จำกัด ในการใช้ในกระดานเรื่องราวเลย และฉันไม่มีวัตถุ UIButtonBarView ในแอพหรือกระดานเรื่องราว

ไม่มีข้อความใดพิมพ์ออกมาเมื่อแอพเปิดใช้งานและวางมุมมองรูต ไม่มีเมื่ออุปกรณ์จำลองถูกหมุน

แต่ในเครื่องจำลองทันทีที่ฉันคลิกที่หนึ่งในฟิลด์ข้อความส่วนขยายของแป้นพิมพ์เกิดขึ้นจากด้านล่างของหน้าจอแม้ว่าจะไม่ใช่แป้นพิมพ์แบบเต็มซึ่งดูเหมือนจะไม่เคยปรากฏในเครื่องจำลอง แต่สิ่งต่อไปนี้จะถูกพิมพ์ออกมาบนเครื่อง:

Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. 
Try this: 
    (1) look at each constraint and try to figure out which you don't expect; 
    (2) find the code that added the unwanted constraint or constraints and fix it. 
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
"<NSAutoresizingMaskLayoutConstraint:0x6000034e7700 h=--& v=--& UIKeyboardAssistantBar:0x7f9c7d714af0.height == 0   (active)>",
"<NSLayoutConstraint:0x6000034aba20 V:|-(0)-[_UIUCBKBSelectionBackground:0x7f9c7d51ec70]   (active, names: '|':_UIButtonBarButton:0x7f9c7d51de40 )>",
"<NSLayoutConstraint:0x6000034aba70 _UIUCBKBSelectionBackground:0x7f9c7d51ec70.bottom == _UIButtonBarButton:0x7f9c7d51de40.bottom   (active)>",
"<NSLayoutConstraint:0x6000034fb3e0 V:|-(0)-[_UIButtonBarStackView:0x7f9c7d715880]   (active, names: '|':UIKeyboardAssistantBar:0x7f9c7d714af0 )>",
"<NSLayoutConstraint:0x6000034fb750 V:[_UIButtonBarStackView:0x7f9c7d715880]-(0)-|   (active, names: '|':UIKeyboardAssistantBar:0x7f9c7d714af0 )>",
"<NSLayoutConstraint:0x6000034abc00 'UIButtonBar.maximumAlignmentSize' _UIButtonBarButton:0x7f9c7d51de40.height == UILayoutGuide:0x600002ef4e00'UIViewLayoutMarginsGuide'.height   (active)>",
"<NSLayoutConstraint:0x6000034d7cf0 'UIView-bottomMargin-guide-constraint' V:[UILayoutGuide:0x600002ef4e00'UIViewLayoutMarginsGuide']-(9)-|   (active, names: '|':_UIButtonBarStackView:0x7f9c7d715880 )>",
"<NSLayoutConstraint:0x6000034d7c50 'UIView-topMargin-guide-constraint' V:|-(10)-[UILayoutGuide:0x600002ef4e00'UIViewLayoutMarginsGuide']   (active, names: '|':_UIButtonBarStackView:0x7f9c7d715880 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x6000034aba70 _UIUCBKBSelectionBackground:0x7f9c7d51ec70.bottom == _UIButtonBarButton:0x7f9c7d51de40.bottom   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

แน่นอนว่าสำหรับฉันแล้วสิ่งเหล่านี้เกี่ยวข้องกับแอปของฉันและทุกสิ่งที่แอปเปิลทำในการสร้างมุมมองแป้นพิมพ์ของตัวเองแม้จะมีนามสกุลเล็ก ๆ ของฉันประกาศว่าจะรวมเข้ากับมัน

ดังนั้นคำถามยังคงมีสิ่งที่ฉันเป็นนักพัฒนาแอปรับผิดชอบในการทำ (ในข้อสันนิษฐานนี้เป็นสิ่งที่ควรค่าแก่การเข้าร่วม) หรือเป็นเพียงปัญหา / ข้อบกพร่องของ Apple เอง?

FWIW ข้อความแจ้งปัญหาข้อ จำกัด นี้จะไม่เกิดขึ้นเมื่อทำการจำลอง iPad รุ่นใหม่เช่น iPad Pro 12.9 นิ้ว (รุ่นที่ 3) แต่ข้อความจะปรากฏขึ้นเมื่อจำลอง iPad Pro 9.7 นิ้ว "ทั้งหมดอ้างว่าพวกเขาใช้ iOS 12.1


1

ฉันได้รับข้อผิดพลาดเดียวกันนี้ แต่เฉพาะในมุมมองเฉพาะเมื่อฉันสัมผัสฟิลด์ข้อความแรกและจากนั้นฟิลด์ข้อความถัดไปลง

ฉันกำลังเขียนใน SwiftUI สำหรับ iOS 13.4

 Unable to simultaneously satisfy constraints.
        Probably at least one of the constraints in the following list is one you don't want. 
        Try this: 
            (1) look at each constraint and try to figure out which you don't expect; 
            (2) find the code that added the unwanted constraint or constraints and fix it. 
    (
        "<NSLayoutConstraint:0x2809b6760 'assistantHeight' TUISystemInputAssistantView:0x105710da0.height == 44   (active)>",
        "<NSLayoutConstraint:0x2809ccff0 'assistantView.bottom' TUISystemInputAssistantView:0x105710da0.bottom == _UIKBCompatInputView:0x10525ae10.top   (active)>",
        "<NSLayoutConstraint:0x2809cccd0 'assistantView.top' V:|-(0)-[TUISystemInputAssistantView:0x105710da0]   (active, names: '|':UIInputSetHostView:0x105215010 )>",
        "<NSLayoutConstraint:0x2809ca300 'inputView.top' V:|-(0)-[_UIKBCompatInputView:0x10525ae10]   (active, names: '|':UIInputSetHostView:0x105215010 )>"
    )

    Will attempt to recover by breaking constraint 
    <NSLayoutConstraint:0x2809ccff0 'assistantView.bottom' TUISystemInputAssistantView:0x105710da0.bottom == _UIKBCompatInputView:0x10525ae10.top   (active)>

    Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
    The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

0

ฉันยังได้รับปัญหาเดียวกันของการทำลายข้อ จำกัด ในบันทึกสำหรับ viewCircle ใน xib ฉันเกือบจะลองทุกอย่างที่กล่าวไว้ข้างต้นและไม่มีอะไรทำงานให้ฉัน จากนั้นฉันพยายามเปลี่ยนลำดับความสำคัญของข้อจำกัดความสูงซึ่งทำลายลงในบันทึก (ยืนยันโดยการเพิ่มตัวระบุสำหรับข้อ จำกัด ใน xib) ป้อนคำอธิบายรูปภาพที่นี่


-1

สิ่งหนึ่งที่ต้องระวัง (อย่างน้อยสิ่งนี้ทำให้ฉันสะดุด) คือการที่ฉันลบข้อ จำกัด ออกจากมุมมองที่ผิด ข้อ จำกัด ที่ฉันพยายามลบไม่ใช่ข้อ จำกัด ของมุมมองของฉันดังนั้นเมื่อฉันทำ

myView.removeConstraint(theConstraint)

มันไม่ได้ลบอะไรจริงๆเพราะฉันต้องการโทร

myView.superView.removeConstraint(theConstraint)

เนื่องจากข้อ จำกัด เป็นข้อ จำกัด ทางเทคนิคของมุมมองของฉัน


-4

รวดเร็ว 4

ฉันเพิ่งเพิ่มบรรทัดนี้ใน viewDidLoad และทำงานได้ดีกับฉัน

view.removeConstraints(view.constraints)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.