3

一部のサブビューのカスタム レイアウトを作成しようとしています。私のファイルは であるViewControllerため、そのビューを として参照する必要がありますself.view。サブビューは のサブビューですself.view

[self layoutSubviews];で明示的に呼び出すとviewDidLoad、コードが-layoutSubviews問題なく実行されます。

ただし、-layoutSubviews明示的に呼び出したりselfUIViewController. 私はそれを次のように呼び出して実装しようとし-setNeedsLayoutました: [self.view setNeedsLayout]in viewDidLoad、およびの明示的な呼び出しを取り出しますが-layoutSubviews、その宣言は保持します。しかし、それはうまくいかなかったようです。

layoutSubviews がいつ呼び出されるかについての記事にリンクされていて、サブビューを追加するときに呼び出す必要があるようですが、ここでは発生していないようです。

安全でありたい場合、UIViewおよびそのメソッドのクラス参照で提案されている方法で物事を行う場合、両方のメソッドを使用できるようにするにはどうすればよいですか?

4

4 に答える 4

6

-[UIViewController layoutSubviews]またはなどというものはありません-[UIViewController setNeedsLayout]。これらはUIViewメソッドです。

システムを使用したい場合はlayoutSubviews、トップレベルをサブクラス化UIViewし、そこに実装する必要があります。デフォルトでは何もしません。ビュー コントローラーを使用してビューをレイアウトする場合は、 との混同を避けるために、メソッドに別の名前を付けます (layoutビュー コントローラーには「サブビュー」がないため、 など) UIView

于 2012-08-13T17:14:29.410 に答える
1

-layoutSubviews直接電話してはいけません。パフォーマンスに悪影響を与える可能性がありますが、他の理由も当てはまる可能性があります。代わりに を呼び出します-setNeedsLayout。このメソッドは、次の描画パスでメソッドを呼び出す必要があるフラグ (またはブール値) を-layoutSubviews設定します (いくつかのメソッドがこのフラグを設定する場合がありますが、適切な時期になるまで再描画を強制しません)。

あなたの-layoutSubviews実装-layoutSubviewsはスーパークラスを呼び出しますか?

この問題をさらに解決できるように、コードを表示する必要があるかもしれません。

于 2012-08-13T17:01:41.227 に答える