我正在尝试以编程方式使用UIButton
在中心垂直和水平设置AutoLayouts
这是我的代码:
- (void)awakeFromNib {
UIView *av = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.bounds.size.width, 35.0)];
UIButton *doneButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 37, 30)];
//UIButton title, color, backgroung color, targer action ...
NSLayoutConstraint* cn3 = [NSLayoutConstraint constraintWithItem:doneButton
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:av
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0];
[av addConstraint:cn3];
NSLayoutConstraint* cn4 = [NSLayoutConstraint constraintWithItem:doneButton
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:av
attribute:NSLayoutAttributeCenterY
multiplier:1.0
constant:0];
[av addConstraint:cn4];
[av addSubview:doneButton];
self.theTextField.inputAccessoryView = av;
}
以上代码工作正常,除了一件事,我在控制台中收到此警告:
未为约束准备视图层次结构: NSLayoutConstraint:0x7fcfc494efb0 UIButton:0x7fcfc2624420'Done'.centerX == 的UIView:0x7fcfc2624230.centerX
添加到视图时,约束的项必须是后代 该视图(或视图本身)。如果约束,这将崩溃 需要在组装视图层次结构之前解析。打断 - [UIView(UIConstraintBasedLayout)_viewHierarchyUnpreparedForConstraint:]进行调试。
对Y发出相同的警告。
请告诉我,为什么我收到此警告会出现什么问题?
答案 0 :(得分:2)
在设置约束之前,将doneButton
添加到av
视图。
[av addSubview:doneButton];
[av addConstraint:cn3];
[av addConstraint:cn4];