0

私が達成しようとしていることはかなり単純明快に思えますが、私はこれを丸一日続けてきましたが、それを理解することはできません.

ページ付きスクロール ビューを持つシーンを含むストーリーボード (まだ自動レイアウトを使用していません) があります。コードでインスタンス化する 2 つの XIB もあります。最初の XIB (A) には、UILabelとジェネリックがありUIViewます。2 番目の XIB (B) はUIButton、+ 配置で 5 秒しかありません。最終的な目標は、B を A のジェネリック ビューにロードし (水平方向の中央に配置し、ラベルの下に「デフォルト値」を配置)、スクロール ビューで A がページ全体を占めるようにすることです。

XIB A のビューのサイズを変更すると、汎用ビューのサイズが拡大および縮小されますが、常にラベルの下のデフォルト値のままです。XIB B のビューのサイズを変更すると、ボタンの配置が中央に配置されたままになります (これが必要です)。これは私が望む動作です。

ただし、次のコードでは機能しません。

View A *viewA = [[ViewA alloc] initWithFrame:CGRectZero];
viewA.textLabel.text = @"A label with a rather long text";

ViewB *viewB = [[ViewB alloc] initWithFrame:CGRectZero];

[viewA setTranslatesAutoresizingMaskIntoConstraints:NO];
[viewB setTranslatesAutoresizingMaskIntoConstraints:NO];

[viewA.customView addSubview:viewB]; // customView is the generic view

これにより、次のことがわかります。

ここに画像の説明を入力

(白い部分がスクロールビュー、赤い部分がビューA、緑の部分がビューBです。)

ビュー B がそのスーパービューの幅全体を占めるようにする制約を追加しようとしました。

[viewA.customView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[viewB]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(viewB)]];

しかし、その結果は次のようになります。

ここに画像の説明を入力

ボタンを緑色の領域の中央に配置するにはどうすればよいですか? 緑の領域が赤の領域で完全に覆われているのか、赤の領域が緑の領域の中心にあるだけなのかは気にしません。

4

1 に答える 1

0

xibで自動レイアウトを使用しないと述べたので、コードに制約を追加しても効果はないと思います。コードに追加されたビューには、適切な AutoresizingMasks を使用してみてください。正当な理由がない限り、xibs で Auto-Layout を (正しく) 使用するようにしてください。

マスクの例を以下に示します。必要なものを特定する必要があります。実際の例ではわかりません。

yourView.translatesAutoresizingMaskIntoConstraints = NO;
[yourView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];
于 2013-05-29T20:49:29.140 に答える