2

画面の幅いっぱいに 2 つのパネルが並んでいて、どちらも画面と同じ高さの iPad レイアウトが必要です。私の試みは次のようになりました

self.view addConstraints:
    @"|[_sidePanel(300)]-1.0-[_mainPanel]|"
    @"V:|[_sidePanel]|"
    @"V:|[_mainPanel]|"

__sidePanel_ 内で、子ビューにさらに制約を作成しようとしています。

_sidePanel ビューは UIScrollView であることに注意してください。

サイド パネルで 2 つのビューを重ねて表示したいと考えています。
そこで、__sidePanel_ に次の制約を追加します。

_sidePanelView addConstraints:
    @"|[_top(300)]|"
    @"|[_bottom(300)]|"
    @"V:|[_top]-5.0-[_bottom]|"

あいまいさを避けるために、これら 2 つのビューの幅を指定する必要があるようです。

しかし、ボトムビューで __sidePanel_ の残りのスペースを埋める必要があります。

__bottom_ を __top_ の下部 (コンテンツに基づいてある時点で定義された高さを取得) とその親 __sidePanel_ の下部に固定すると、__sidePanel_ と __bottom_ の両方があいまいになります。制約が非常に似ているため、これは理にかなっています(そして、__bottom_の制約を最上位のself.viewではなく__sidePanel_ビューに追加しても回避されません)。

__bottom_ の高さをハードコーディングすると、あいまいさは解消されますが、定義された高さは必要ありません。__sidePanel_ の残りのスペースを埋めたい。

あいまいさを解決するために何ができるかについての提案はありますが、それでも私が求めていることを達成できますか?

4

2 に答える 2

3

上または下のいずれかの高さを指定する必要があります。上がある時点で定義された高さを取得するように聞こえますが、最初に定義された高さを設定する必要があります。これは後で変更できます。

また、上または下の幅 (300) を指定する必要はありません。これは、幅が定義されている sidePanel の側面に幅を固定しているためです。したがって、これらの制約はあいまいさなく正常に機能しました。

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_sidePanel(300)]-1.0-[_mainPanel]|" options:0 metrics:nil views:viewsDict]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_sidePanel]|" options:0 metrics:nil views:viewsDict]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_mainPanel]|" options:0 metrics:nil views:viewsDict]];

    [_sidePanelView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_top]|" options:0 metrics:nil views:viewsDict]];
    [_sidePanelView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_bottom]|" options:0 metrics:nil views:viewsDict]];
    [_sidePanelView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_top]-5.0-[_bottom]|" options:0 metrics:nil views:viewsDict]];
    self.topHeightCon = [NSLayoutConstraint constraintWithItem:self.top attribute:NSLayoutAttributeHeight relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:300];
    [self.top addConstraint:self.topHeightCon];

後で、top の実際の高さを計算するときに、self.topHeightCon.constant = (some value) を使用して高さを調整できます。

于 2013-08-07T00:42:09.197 に答える
1

私の場合、サブビューをその境界に制約しようとしていたビューがUIScrollViewであったという事実に行き着きましたが、これは起こっていませんでした。私はそれをUIViewに変更し、制約が機能するようになりました。そして、あなたはそれを持っています。

于 2013-08-14T14:56:14.590 に答える