Что такое NSLayoutConstraint «UIView-Encapsulated-Layout-Height» и как я должен заставить его пересчитывать чисто?

у меня есть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 height to be> = 70.0), однако, кажется неправильным, что это производное ограничение отменяет обновленный пользовательский cnstraint.

Хуже того, хотя код компоновки говорит, что он пытается нарушить мое ограничение по высоте, он этого не делает - он пересчитывает высоту ячейки, и все отрисовывается так, как мне бы хотелось.

Итак, что жеNSLayoutConstraint UIView-Encapsulated-Layout-Height (Я предполагаю, что это расчетная высота для автоматического определения размера ячеек), и как мне заставить его пересчитать чисто?

Ответы на вопрос(13)

Ваш ответ на вопрос