您至少可以在代碼中做到這一點;無論如何,我是放棄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