Mat*_*ros 10 iphone objective-c uiview ios autolayout
我正在尝试使用可视格式语言将顶部和底部填充设置为Autolayout中的视图.如果我将可视格式字符串中的填充写为整数,代码将编译并运行,但是当我尝试用常量替换它时它会失败.这是我得到的错误:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'无法解析约束格式:无法设置等于视图宽度或高度的空间.也许您想使用视图作为间隔?[view1] [spacer(== view1)] [view2] V:| -kTopAndBottomPadding- [messageTextView] -kTopAndBottomPadding- |
这是我的代码.
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];
}
Run Code Online (Sandbox Code Playgroud)
我认为错误消息意味着编译器认为kTopAndBottomPadding是a UIView,当它NSNumber是字典中定义的时候.有没有办法做到这一点?
rde*_*mar 30
这就是指标字典的用途.因此,例如,如果要在VFL字符串中使用"填充"作为常量,请执行以下操作:
[constraints addObjectsFromArray:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-padding-[messageTextView]-kTopAndBottomPadding-|"
options:NSLayoutFormatAlignAllTop
metrics:@{@"padding":@5}
views:variableBindings]];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8234 次 |
| 最近记录: |