IB に UIView があり、その中に別の UIView があり、これをコンテナー ビューとして使用しています。コードでは、3 つの異なるビューを作成し、アプリの状態に応じて適切なビューをコンテナーのビューにアニメーション化します。3 つの異なるビューのうち、常に有効なのは 1 つだけです。問題は、シミュレーターで別の iPhone を実行すると、新しいサブビューがコンテナー ビューと一致するようにスケーリングされないことです。自動レイアウトを使用しています。テスト目的で、サブビューを、すべてのエッジがスーパービューに制限された大きなボタンになるように設定しました。また、コンテナー ビューには、スーパービューに制約されたエッジもあります。私が望むのは、サブビューがコンテナのビューと一致することです。つまり、ボタンはコンテナ ビューのサイズ全体を拡大します。
以下は、サブビューを初期化し、コンテナー ビューに関連する制約を設定するために使用するコードです。
UIView *containerView = self.subView;
UIView *newSubview = [[mySubview alloc] init];
[newSubview setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.containerView addSubview:newSubview];
[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]];
[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0]];
[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]];
[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0]];
私はこれを機能させることができないようです。私は自動レイアウトにかなり慣れていないので、何が間違っているのかわからず、この壁に頭をぶつけるのをやめたいと思っています。どんな助けでも素晴らしいでしょう。:)
************* 追加情報 **************
申し訳ありませんが、私の問題をできるだけ明確に述べていません。そのため、スクリーンショットを含む詳細情報を次に示します。まず、コードごとに行ったことを説明します。
AppDelegate.m の didFinishLaunchingWithOptions で、次のように MyViewController を作成します。
self.myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
MyViewController.m の viewDidLoad で、mySubview を作成し、それを自分の containerView に追加して、次のように制約を作成します。
UIView *containerView = self.containerView;
UIView *mySubview = [[MySubview alloc] init];
[mySubview setTranslatesAutoresizingMaskIntoConstraints:NO];
[containerView addSubview:mySubview];
NSDictionary *views = NSDictionaryOfVariableBindings(mySubview);
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[mySubview]|"
options:0
metrics:nil
views:views]];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[mySubview]|"
options:0
metrics:nil
views:views]];
そして最後に、MySubview.h の init で、ペン先を次のようにサブビューとして追加します。
- (id)init
{
if(self = [super init])
{
NSArray *nibArray = [[NSBundle mainBundle]loadNibNamed:@"MySubview" owner:self options:nil];
[self addSubview:[nibArray objectAtIndex:0]];
}
return self;
}
役立つかもしれないいくつかの注意事項、
MyViewController.xib には、containerView として使用している UIView があります。UIView* containerView への IBOutlet があり、上記で参照したものです。IB の containerView に対して私が持っている唯一の制約は、Superview の先頭、末尾、および下部のスペースと、Superview の上部のスペース = 44 です。
MySubview.xib の場合、高さと幅は 300 です (高さと幅の制約は使用されません)。mySubview は containerView に制限されるはずなので、これらのサイズは問題にならないように感じます。
MySubview.xib には、topButton: height = 29、middleView: height = 242、bottomButton: height = 29 の 3 つのオブジェクトがあります。MiddleView には、Superview の先頭と末尾の制約、および top から topButton への制約と、bottom から bottomButton への制約があります。そして最後に、bottomButton には、先頭、末尾、および下から Superview への制約と、上から middleView への制約があります。
制約が作成および追加されているため、mySubview が containerView に合わせてスケーリングされるようにしたいのですが、代わりに mySubview が非常に大きくなり、containerView がクリップされます。
ここにいくつかのスクリーンショットがあります:
MyViewController.xib、タイトルの下の青い四角形は私のコンテナー ビューであり、IBOutlet containerView があります。
MySubview.xib
そして最後に、正しくない結果です。
代わりに、スクリーンショットを取得するためだけに偽造したこれが必要です。
iPhone4では、
iPhone5では、
偽のスクリーン ショットでわかるように、mySubview は、containerView に合わせてスケーリングされますが、containerView はさまざまな電話の画面サイズに合わせて少しスケーリングされます。
私が情報で船外に出なかったことを願っています。どんな助けでも素晴らしいでしょう。近づいたような気がしますが、重要なステップが 1 つ欠けているに違いありません。ぐらぐら。