5

コンテナビューで自動レイアウトを使用する際に問題が発生します(どちらの場合も、iOS5から使用されるビュー包含パターンと単純なコンテナビューを使用します)。

ある種のカスタムマスター詳細コントローラーがあります。ユーザーの操作後に左側のコンテナーのサイズを変更できます。右側のコントローラーを関連付けるには、使用されていない新しいスペースに応じてサイズを変更する必要があります。

「詳細」コントローラーの場合、Xibを使用してコントローラーをセットアップし、自動レイアウトを使用して、その内部にいくつかのビューを表示します。視覚的な形式では、次のようになります。

  • V:| [headerView] [contentView] [footerView] |
  • H:| [headerVieW]
  • H:| [contentView]
  • H:| [footerView]

これは、問題を理解するための表現にすぎません。

詳細controller.viewフレームのサイズを変更しようとすると、これは正しく展開されますが、サブビューは展開されません。

そのコントローラーの-(void)viewDidLayoutSubviewsメソッドで、フレームを手動で設定しようとしましたが、それは機能しますが、自動レイアウトを使用しているため、これは正しくないと思います。

この問題は、汎用ビューと画像ビューを含むサブビューがある場合、自動レイアウトを使用してxibからそのビューを定義する場合、ビューが設定された後にフレームを実行時に変更する場合、サブビュー(edampleの場合はimageviews)のサイズが変更されない場合に再び発生します。 。

誰でも私を助けることができますか?

ありがとう!

4

2 に答える 2

1

制約の説明に基づいて、説明されている動作はまさにあなたが言ったことだと思います。

水平方向の制約では、ビューがスーパービューの左側と同じ高さになる必要があることに注意してください。ただし、スーパービューの右側にどのように関連付けるべきかについては何も述べていません。したがって、スーパービューの幅を変更しても何も起こりません。それらは左のサイズにぴったりと収まり、内部の制約が提供する幅を維持します。

スーパービューでビューのサイズを変更する場合は、後続側に制約を追加する必要があります。具体的には、制約は次のようになります。

H:|[headerView]|
H:|[contentView]|
H:|[footerView]|

または、スーパービューが狭すぎる場合にのみ縮小し、それ以外の場合は全体に拡大しないようにすることもできます。次に、次のようにします。

H:|[headerView]-(>=10)-|
H:|[contentView]-(>=10)-|
H:|[footerView]-(>=10)-|

とにかく、あなたの問題の根本は、ビューがスーパービューの右端に結び付けられておらず、これがその幅に結び付けられていないことです。これらの制約を追加すると、問題が解決するはずです。

于 2013-05-20T12:59:02.680 に答える