1

与えられた:

「ロゴ」(スーパービューの上部から垂直方向のスペースが10以上のuiimageview)および「ログイン」とロゴとホルダービューの間の垂直方向のスペースは<= 31

ゴール:

lanscapeモードでは、画面サイズからの変更によりロゴが上に移動し、ホルダービューも移動する必要があります。

ただし、縦向きから横向きに回転すると、垂直方向の制約が81のままであることがわかります(どういうわけか、この値をxcodeから削除することはできません)。また、「メインビュー」と「ログイン」の間の縦のスペースも削除できません。私はここで何か間違ったことをしていることを知っています。

この問題について何か提案があれば助けてください。

詳細:

+写真1は、制約に関する詳細を含むポートレートモードです。

ここに画像の説明を入力してください

+写真2は、いくつかのエラーがあるlanscapeモードです。

ここに画像の説明を入力してください

編集済み:私が設定した方法と同様に、ロゴの垂直方向のスペースを縮小できるようにしたいのですが、メインビューの上部から常に10以上です

4

2 に答える 2

1

これがすべてIBでできるかどうかはわかりません。もしそうなら、私はまだそれを理解していません。以下に示すように、コードで実行しました。まず、画像ビューの上部からメインビューの上部までの固定値の制約と、画像ビューとログインビューの間の制約から始めます。これはシステムを満たすのに十分なはずであり、メインビューの上部または下部にある他の制約を削除できます(テストでは、固有の高さを持つボタンを使用したので、それを設定する必要はありませんでした。ビューには固有または特定の高さが設定されていません。これも行う必要があります)。次に、コードでその制約を一番上(IBOutlet conTop)に削除し、一番下に作り直します。

@implementation ViewController {
    IBOutlet NSLayoutConstraint *conTop;
    IBOutlet UIButton *button;
}

- (void)viewDidAppear:(BOOL)animated  {
    [super viewDidAppear:animated];
    [self.view removeConstraint:conTop];
    conTop = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeTop relatedBy:0 toItem:self.view attribute:NSLayoutAttributeBottom multiplier:.5 constant:-120];
    [self.view addConstraint:conTop];
    [self.view layoutSubviews];
}

乗数と定数を併用することで、回転後の動きを調整できます。ここで選んだ数字は私にはかなり良さそうに見えましたが、それらをいじって、それらが何をしているのかを確認することができます。乗数は感度係数と考えることができます。その分数が小さいほど、回転時に上からの距離の変化が少なくなります。正確な値が必要な場合は、小さな代数を使用して乗数と定数の値を計算できます。

于 2013-02-06T17:31:51.383 に答える
0

関係を宣言的に表現する方法を見つける必要があります。理想的には、両方の場合に機能する用語で表現する必要があります。

ランドスケープモードで何をしたいのか、まだはっきり言っていません。上部のロゴですが、上部からどれくらい離れていますか?ホルダービューをどこに配置しますか?

自動レイアウトがどのように機能するかを理解するために不可欠なWWDCビデオがあります。もう見る機会はありましたか?

于 2013-02-06T16:46:25.403 に答える