Zuvor in iOS6, meine Chat-Nachrichtenansicht Controller korrekt angezeigt und animiert mit sorgfältig konstruierten Autolayout-Einschränkungen in IB. Hier ist die aktuelle Ansicht Hierarchie mit den entfernt Einschränkungen in Xcode 5:iOS7 Probleme mit NSIBPrototypingLayoutConstraint Autolayout-Einschränkungen von Interface Builder generiert
Nach dem Upgrade auf XCode 5 und iOS7, fand ich brauchte ich alle zu löschen, die alten Einschränkungen, um für die Standarddurchscheinend Statusleiste zu berücksichtigen Andernfalls würde meine Symbolleiste unter die Statusleiste fallen. Dies geschah trotz Aufruf von setEdgesForExtendedLayout: mit UIRectEdgeNone.
ich jetzt in viewDidLoad alle Einschränkungen bin versucht, programmatisch zu erstellen:
// self.view.translatesAutoresizingMaskIntoConstraints = NO; // errors either way
NSArray *viewHorizConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_toolbar]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_toolbar)];
[self.view addConstraints:viewHorizConstraints];
viewHorizConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_viewContainer]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_viewContainer)];
[self.view addConstraints:viewHorizConstraints];
NSArray *viewVertConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(20)-[_toolbar(44)]-[_viewContainer]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_toolbar, _viewContainer)];
[self.view addConstraints:viewVertConstraints];
NSArray *tableContainerVertConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_tableView(<[email protected])][_viewInputContainer(44)]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tableView, _viewInputContainer)];
[_viewTableContainer addConstraints:tableContainerVertConstraints];
NSArray *containerVertConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_viewTableContainer][_viewOptions]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_viewTableContainer, _viewOptions)];
[_viewContainer addConstraints:containerVertConstraints];
// _constraintContainerVertSpace = [NSLayoutConstraint constraintWithItem:_viewTableContainer attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:_viewContainer attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; // same as below
containerVertConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[_viewTableContainer]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_viewTableContainer)];
_constraintContainerVertSpace = [containerVertConstraints lastObject];
[_viewContainer addConstraint:_constraintContainerVertSpace];
containerVertConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=0)-[_viewOptions]-(>[email protected])-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_viewOptions)];
[_viewContainer addConstraints:containerVertConstraints];
Wenn ich jedoch die vertikale Raumbegrenzung zwischen meinem containerView und tableContainerView, erhalte ich Fehler zu ändern versuchen. (. Ich versuche, die tableContainerView, um die Größe mit dem Aussehen der Tastatur schrumpfen)
[UIView animateWithDuration:0.25f
delay:0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
_constraintContainerVertSpace.constant = -keyboardHeight;
} completion:nil];
Dies sind die Einschränkungen, die gleichzeitig nicht erfüllen:
(
"<NSIBPrototypingLayoutConstraint:0x140d7bb0 'IB auto generated at build time for view with fixed frame' V:|-(460)-[UIView:0x140ddef0] (Names: '|':UIView:0x140dde60)>",
"<NSIBPrototypingLayoutConstraint:0x140d7c10 'IB auto generated at build time for view with fixed frame' V:[UIView:0x140ddef0(44)]>",
"<NSLayoutConstraint:0x14d9db30 V:[UIView:0x140ddef0]-(0)-| (Names: '|':UIView:0x140dde60)>",
"<NSIBPrototypingLayoutConstraint:0x140e0290 'IB auto generated at build time for view with fixed frame' V:|-(0)-[UIView:0x140dde60] (Names: '|':UIView:0x140dddd0)>",
"<NSLayoutConstraint:0x14d9df60 V:[UIView:0x140dde60]-(-216)-| (Names: '|':UIView:0x140dddd0)>",
"<NSIBPrototypingLayoutConstraint:0x140e0830 'IB auto generated at build time for view with fixed frame' V:|-(64)-[UIView:0x140dddd0] (Names: '|':UIView:0x140e0470)>",
"<NSLayoutConstraint:0x14d9d820 V:[UIView:0x140dddd0]-(0)-| (Names: '|':UIView:0x140e0470)>",
"<NSAutoresizingMaskLayoutConstraint:0x1403a0b0 h=--& v=--& V:[UIView:0x140e0470(568)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x14d9db30 V:[UIView:0x140ddef0]-(0)-| (Names: '|':UIView:0x140dde60)>
UIView: 0x140dde60 ist in diesem Fall _viewTableContainer. 0x140ddef0 = _viewInputContainer. 0x140dddd0 = _viewContainer.
Warum ist das NSIBPrototypingLayoutConstraint V: | - (460) - [UIView: 0x140ddef0 (_viewInputContainer)] von IB erstellt wird, wenn ich translatesAutoresizingMaskIntoConstraints auf NO gesetzt habe, und wenn ich schon eindeutige vertikale Beschränkungen zwischen _viewInputContainer definiert und die _tableView darüber?
Ich habe versucht, Cocoa Layout in Instrumenten zu verwenden, aber es gibt zu viel Lärm, um einen Sinn davon zu machen.
Überprüfen Sie diese sehr ähnliche Frage hier: http: // stackoverflow.com/questions/19015215/probleme mit autolayout-on-uitableviewcell/19020006 # 19020006 – smileyborg