2016-09-18 10 views
0

スーパービューが隠されていてもUIViewの「隠れた」プロパティは「偽」です。スーパービューが隠されていても、UIViewの隠しプロパティはfalseです。

ツリーを登ることなくUIViewが非表示になっているかどうかを知る方法はありますか?

例:

(lldb) po 0x7ffba8120f40 
<UIButtonLabel: 0x7ffba8120f40; frame = (0 6; 25 18); text = ' All'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7ffba8121160>> 

(lldb) p (BOOL)[0x7ffba8120f40 isHidden] 
(BOOL) $605 = NO 
(lldb) po [0x7ffba8120f40 superview] 
<UIButton: 0x7ffba811ffd0; frame = (0 15; 100 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7ffba811d200>> 

(lldb) p (BOOL)[0x7ffba8120f40 isHidden] 
(BOOL) $607 = NO 

(lldb) po [0x7ffba8120f40 superview] 
<UIButton: 0x7ffba811ffd0; frame = (0 15; 100 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7ffba811d200>> 

(lldb) p (BOOL)[0x7ffba811ffd0 isHidden] 
(BOOL) $612 = NO 
(lldb) po [0x7ffba811ffd0 superview] 
<UIView: 0x7ffba811fe60; frame = (16 20; 110 60); autoresize = RM+BM; layer = <CALayer: 0x7ffba811d1e0>> 

(lldb) p (BOOL)[0x7ffba811fe60 isHidden] 
(BOOL) $614 = NO 
(lldb) po [0x7ffba811fe60 superview] 
<InsertViewer.ExploreHeader: 0x7ffba4de2f40; baseClass = UICollectionReusableView; frame = (-8 -20; 375 100); clipsToBounds = YES; hidden = YES; opaque = NO; layer = <CALayer: 0x7ffba811ddd0>> 

(lldb) p (BOOL)[0x7ffba4de2f40 isHidden] 
>>>>>>>>>>>>>>>>>>>(BOOL) $618 = YES <<<<<<<<<<<<<<<<<<<< 

答えて

0

各サブビューは、それ自身の隠された性質を持っています。親ビューのhiddenプロパティがtrueに設定されていて、サブビューの一部がhiddenとしてマークされている場合、親の隠しフラグをFALSEに変更すると、親とそれ以外の子は表示されますが、 。

子ビューが本当に隠されていないかどうかを知る方法は分かりません。スーパービューツリーを歩かずに、すべての親ビューの非表示状態をチェックします。親の境界でクリップされる可能性があるか、マスクレイヤーがある可能性がある、または不透明度がゼロか、おそらく他のいくつかのものである可能性があるので、それが可視であることを保証するものではありません。

+0

私は、隠れた祖先のためにビューが隠されていることを知ることをより心配しています。私は、ビューの隠しプロパティをテストするのではなく、完全なスーパービューパスをチェックすることに頼った。厄介ですが動作します –

+0

ビューが隠されている場合、またはチェーン上のスーパービューのいずれかが非表示になっている場合、TRUEを返すメソッドhiddenBySuperviewを使用して、UIViewの拡張機能を作成できます。 (ビューにスーパービューがない場合には、コードを記述してください。その場合、メソッドはそれ自身の隠しフラグを返します)。 –

関連する問題