您至少可以在代码中做到这一点;无论如何,我是放弃Interface Builder并在代码中使用它的类型。当涉及到添加或调整约束时,IB似乎常常陷入困境。这是我在自定义UIToolbar
子类的-initWithFrame:
方法中所做的。
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[self addSubview:self.label];
[self addConstraint:[NSLayoutConstraint
constraintWithItem:self.label
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeCenterX
multiplier:1 constant:0]];
[self addConstraint:[NSLayoutConstraint
constraintWithItem:self.label
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeCenterY
multiplier:1 constant:0]];
}
return self;
}
而且因为我喜欢懒惰的负载尽可能,这是我self.label
实例变量(当[self addSubview:self.label]
被上述传递消息的称呼)。
- (UILabel *)label {
if (_label) return _label;
_label = [UILabel new];
_label.translatesAutoresizingMaskIntoConstraints = NO;
_label.textAlignment = NSTextAlignmentCenter;
return _label;
}
似乎为我工作。尽管如此,我并没有添加任何UIBarButtonItems
,所以你的里程数不尽相同。
我之前做了一些这样的东西,尽管我基本上只是等待视图的大小改变,然后相应地更新目标视图的框架。如果事实证明没有一种方法可以自动完成,那总是一个选项。 – Brian 2013-02-20 15:25:59
你可以发布图片吗? – 2013-03-20 07:31:00
我会的,但我最终放弃了AutoLayout并回到使用autoresizingmasks。它使用该模型非常有效。 – outerstorm 2013-03-21 12:13:49