需要协助使用Autolayouts在中心设置UIButton

时间:2016-02-05 15:04:41

标签: ios objective-c uiview autolayout nslayoutconstraint

我正在尝试以编程方式使用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发出相同的警告。

请告诉我,为什么我收到此警告会出现什么问题?

1 个答案:

答案 0 :(得分:2)

在设置约束之前,将doneButton添加到av视图

[av addSubview:doneButton];

[av addConstraint:cn3];
[av addConstraint:cn4];