24

自動レイアウトが有効になっている iOS ビューがあり、ツールバーUIToolbarUISearchBarUISegmentControlが含まれています。に柔軟な幅を持たせたいので、これを強制する制約を追加する必要がありますが、Interface BuilderUISearchBarの項目に制約を追加することはできません。UIToolbarオプションはすべて無効です。

AutoLayoutでこれを達成する前にautoresizingmasks

内で制約は許可されていませんUIToolbars/UINavigationBarsか?

自動レイアウトを使用する場合、他にどのようにこれを達成できますか?

4

3 に答える 3

26

自動レイアウト制約は、UIViewsおよびそのサブクラスでのみ機能します。

UIToolbarでは、一部のUIViewベース アイテム ( や などUISearchBar)を許可しますが、 から継承しないものUISegmentedControlと共存する必要がある場合があります。UIBarButtonItemsUIView

autolayout が で動作するようになるまでUIBarButtonItemsは、これまでと同じように行ってください。

別の方法は、独自のツールバーに のみに基づいたウィジェットを配置することUIViewsです。

于 2013-03-27T03:00:06.640 に答える
7

少なくともコードでこれを行うことができます。私は、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ので、走行距離はさまざまです。

于 2013-06-19T15:32:36.167 に答える