2

UIView をサブクラス化するときのベストプラクティスは何ですか? 新しいios 6 autolayoutを使用して、viewcontrollerのビューを完全にコードで実行しようとしています。そこで、UIView をサブクラス化し、#initWithFrame で基本的な制約を設定しました (#updateConstraints でこれを行う必要がありますか?)。問題は、動的テキストと可変幅の UILabel があるため、制約によってフレームが決定された後に #preferredMaxLayoutWidth を設定する必要があるため、#layoutSubviews が最適な場所だと思いますが、それを行うと NSInternalInconsistencyException が発生します。 -layoutSubviews の実行後も自動レイアウトが必要です。-layoutSubviews の MyView の実装では、super を呼び出す必要があります。(RuntimeError) あなたが尋ねる前に、オーバーライドしたすべてのメソッドで super を呼び出したと確信しています。何か案が?

4

2 に答える 2

1

これは私にとってはうまくいくように見えました。理由は説明できませんが、うまくいきました。

-(void)layoutSubviews
{
[super layoutSubviews];

layout code here, including updated constraints 

[super layoutSubviews];
}
于 2013-01-24T20:02:32.373 に答える
1

おそらくここで必要なのは、ビューが [super layoutSubviews] を呼び出すのではなく、先祖である UIView がその [super layoutSubviews] を呼び出すようにすることです。

これは、サブクラス化ではなく、UIView のカテゴリを実装することによって実現できます。これには、layoutSubViews 関数が実装され、super が呼び出されます。あなたのコードがあれば、試してみることができたでしょう。ここで成功した人がいます。

繰り返しますが、これはこれが修正されることを保証するものではありません。これに関する多くのバグ報告が Apple フォーラムにあるようです。残念ながら、Apple ポータルで他の人のバグを閲覧することはできませ

回避策として、制約のいずれかが preferredMaxLayoutWidth 引数と競合する場合もお勧めします。値を増減してみてください。独自の優先順位に従って、物事を変更することができ、(Apple 以外の) 誰が知っているか - 修正される可能性があります。成功を祈っている!

于 2012-12-13T14:04:28.523 に答える