Próbuję ustawić górne i dolne wyściółki w widoku Autolayout przy użyciu języka w formacie wizualnym. Kod kompiluje się i działa, jeśli piszę paddings jako liczby całkowite w łańcuchu formatu wizualnego, ale zawodzi, gdy próbuję go zastąpić stałą. Tutaj jest błąd Dostaję:Jak używać stałej NSNumber lub CGFloat w języku Autolayout?
Zakończenie aplikację spowodowane nieprzechwyconego wyjątkiem „NSInvalidArgumentException”, powód: „Nie można przeanalizować ograniczenie formatu : To nie jest możliwe, aby ustawić przestrzeń równą szerokości lub wysokości z widok. Być może chcesz użyć widoku jako elementu dystansowego? [widok1] [spacer (== widok1)] [widok2] V: | -kTopAndBottomPadding- [messageTextView] -kTopAndBottomPadding- |
A to jest mój kod.
CGFloat const SPMTVC_kTopAndBottomPadding = 5.0;
// ...
// Create my own NSDictionary of variable bindings.
NSDictionary *variableBindings = @{@"messageTextView" : _messageTextView,
@"contentView" : self.contentView,
@"kTopAndBottomPadding" : [NSNumber numberWithFloat:SPMTVC_kTopAndBottomPadding]};
// Constraints in the horizontal axis.
// Basically just pins the view to the left and right of superview.
NSMutableArray *constraints = [[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|-0-[messageTextView(==contentView)]-0-|"
options:NSLayoutFormatAlignAllLeading
metrics:nil
views:variableBindings] mutableCopy];
// Constraints in vertical axis, give 5-point padding from superview's top & bottom.
[constraints addObjectsFromArray:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-kTopAndBottomPadding-[messageTextView]-kTopAndBottomPadding-|"
options:NSLayoutFormatAlignAllTop
metrics:nil
views:variableBindings]];
for (NSLayoutConstraint *constraint in constraints) {
[self.contentView addConstraint:constraint];
}
Myślę, że komunikat o błędzie oznacza, że kompilator myśli kTopAndBottomPadding
jest UIView
, gdy jest to NSNumber
zdefiniowane w słowniku. Czy jest jakiś sposób, aby to zrobić dobrze?
Można tworzyć metryki słownika używając NSDictionaryOfVariableBindings (dopełnienie) Makro również. – LightningStryk
Dopóki twoja klasa nie zawiera już znaków iv dla danych, nie ma wiele korzyści w porównaniu z używaniem literałów słownikowych – uchuugaka