আমার UITableView
আইওএস 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 হিসাবে সেট করেছিলাম ) তবে এটি সঠিক বলে মনে হয় না যে এই উদ্ভূত প্রতিবন্ধকতাটি তখন একটিটিকে ছাড়িয়েছে ব্যবহারকারী আপডেট করা হয়েছে।
সবচেয়ে খারাপ, যদিও লেআউট কোডটি বলেছে যে এটি আমার উচ্চতার সীমাবদ্ধতাটি ভেঙে দেওয়ার চেষ্টা করছে, তা হয় না - এটি ঘরের উচ্চতাটি পুনরায় গণনা করতে চলেছে এবং সমস্ত কিছু আমার পছন্দ মতো আঁকবে।
সুতরাং, কী 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"/>
তার সংজ্ঞায় লাইনটি অনুপস্থিত ছিল , আমাকে বিশ্বাস করতে বাধ্য করেছে এটি একটি আইবি বাগ । কমপক্ষে আমার যাইহোক ছিল।