インターフェイスビルダーでクラスサイズを使用し、サイズごとにわずかに異なるデザインを定義しています。
ビューの 1 つが特定のサイズにインストールされていません。これは期待どおりに機能しますが、そのビューがインストールされているかどうかをプログラムで確認できるようにしたいと考えています。インストールされているかどうかにかかわらず、ビューは決して nil ではないように見え、チェックする isInstalled フラグが表示されません。
これを行う正しい方法は何ですか?
インターフェイスビルダーでクラスサイズを使用し、サイズごとにわずかに異なるデザインを定義しています。
ビューの 1 つが特定のサイズにインストールされていません。これは期待どおりに機能しますが、そのビューがインストールされているかどうかをプログラムで確認できるようにしたいと考えています。インストールされているかどうかにかかわらず、ビューは決して nil ではないように見え、チェックする isInstalled フラグが表示されません。
これを行う正しい方法は何ですか?
これは素晴らしい解決策ではありませんが、私はまだより良い解決策を見つけていません:
ドキュメントには、「アンインストールされたビューのランタイム オブジェクトは引き続き作成されます。ただし、ビューと関連する制約はビュー階層に追加されず、ビューのスーパービュー プロパティは nil です」と記載されています。
したがって、有効なスーパービューのテストは解決策として機能しますが、かなり遅れて来る必要があることがわかりましたviewDidAppear
. viewWillAppear
たとえば、スーパービューはまだ nilです。
UIView を拡張して、ビューにスーパービューがあるかどうかを確認できます。インストールされている場合は true を返し、インストールされていない場合は false を返します。
extension UIView {
func isInstalled() -> Bool{
return (self.superview != nil) ? true : false
}
}