您至少可以在代码中执行此操作;我是那种放弃 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
内容,因此您的里程数会有所不同。