ฉันUITableView
ทำงานภายใต้ iOS 8 และฉันใช้ความสูงของเซลล์อัตโนมัติจากข้อ จำกัด ในกระดานเรื่องราว
หนึ่งในเซลล์ของฉันมีเซลล์เดียวUITextView
และฉันต้องการให้สัญญาและขยายตามการป้อนข้อมูลของผู้ใช้ - แตะเพื่อย่อ / ขยายข้อความ
ฉันกำลังทำสิ่งนี้โดยเพิ่มข้อ จำกัด รันไทม์ลงในมุมมองข้อความและเปลี่ยนค่าคงที่ของข้อ จำกัด เพื่อตอบสนองต่อกิจกรรมของผู้ใช้:
-(void)collapse:(BOOL)collapse; {
_collapsed = collapse;
if(collapse)
[_collapsedtextHeightConstraint setConstant: kCollapsedHeight]; // 70.0
else
[_collapsedtextHeightConstraint setConstant: [self idealCellHeightToShowFullText]];
[self setNeedsUpdateConstraints];
}
เมื่อใดก็ตามที่ฉันทำสิ่งนี้ฉันใส่ไว้ในtableView
อัพเดตและโทร[tableView setNeedsUpdateConstraints]
:
[tableView beginUpdates];
[_briefCell collapse:!_showFullBriefText];
[tableView setNeedsUpdateConstraints];
// I have also tried
// [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
// with exactly the same results.
[tableView endUpdates];
เมื่อฉันทำสิ่งนี้เซลล์ของฉันจะขยาย (และเคลื่อนไหวในขณะที่ทำ) แต่ฉันได้รับคำเตือนข้อ จำกัด :
2014-07-31 13:29:51.792 OneFlatEarth[5505:730175] 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)
(
"<NSLayoutConstraint:0x7f94dced2b60 V:[UITextView:0x7f94d9b2b200'Brief text: Lorem Ipsum i...'(388)]>",
"<NSLayoutConstraint:0x7f94dced2260 V:[UITextView:0x7f94d9b2b200'Brief text: Lorem Ipsum i...']-(15)-| (Names: '|':UITableViewCellContentView:0x7f94de5773a0 )>",
"<NSLayoutConstraint:0x7f94dced2350 V:|-(6)-[UITextView:0x7f94d9b2b200'Brief text: Lorem Ipsum i...'] (Names: '|':UITableViewCellContentView:0x7f94de5773a0 )>",
"<NSLayoutConstraint:0x7f94dced6480 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f94de5773a0(91)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f94dced2b60 V:[UITextView:0x7f94d9b2b200'Brief text: Lorem Ipsum i...'(388)]>
388 คือความสูงที่คำนวณได้ของฉัน, ข้อ จำกัด อื่น ๆ ของUITextView
คือจาก Xcode / IB
สิ่งสุดท้ายที่ทำให้ฉันรำคาญ - ฉันเดาว่าUIView-Encapsulated-Layout-Height
มันคือความสูงที่คำนวณได้ของเซลล์เมื่อมันแสดงผลครั้งแรก - (ฉันตั้งUITextView
ความสูงของฉันเป็น> = 70.0) แต่ดูเหมือนว่ามันไม่ถูกต้อง อัปเดตผู้ใช้ cnstraint
ถึงแม้ว่ารหัสเลย์เอาต์บอกว่ามันพยายามที่จะทำลายข้อจำกัดความสูงของฉัน แต่ก็ไม่ได้ - มันจะทำการคำนวณความสูงของเซลล์อีกครั้งและทุกอย่างก็ดึงตามที่ฉันต้องการ
ดังนั้นคืออะไรNSLayoutConstraint
UIView-Encapsulated-Layout-Height
(ฉันเดาว่ามันคือความสูงที่คำนวณได้สำหรับการปรับขนาดเซลล์อัตโนมัติ) และฉันจะบังคับให้คำนวณใหม่อย่างสมบูรณ์ได้อย่างไร
self.contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
ชุด ฉันคิดว่าในตอนแรกการตั้งค่ารูปแบบการเติมอัตโนมัติจะหยุดข้อ จำกัด สุดท้ายจากการเพิ่ม ฉันพบวิธีแก้ปัญหานี้ที่นี่: github.com/wordpress-mobile/WordPress-iOS/commit/…
<rect key="frame" x="0.0" y="0.0" width="600" height="110"/>
คำจำกัดความทำให้ฉันเชื่อว่านี่เป็นข้อผิดพลาดของ IB . อย่างน้อยฉันก็อยู่แล้ว