मेरे पास 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
एक्सकोड / आईबी से मेरा है।
अंतिम एक मुझे परेशान कर रहा है - मैं अनुमान लगा रहा हूं कि 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"/>
अपनी परिभाषा में रेखा को याद कर रहा था , जिससे मुझे विश्वास हुआ कि यह एक आईबी बग है । कम से कम मेरा तो वैसे भी था।