«Скрытое» свойство UIView является «ложным», даже если вверх по иерархии скрыт супер-вид.Скрытое свойство UIView является ложным, даже если супер-просмотр скрыт.
Есть ли практический способ узнать, скрыт ли 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 <<<<<<<<<<<<<<<<<<<<
Я больше беспокоюсь о том, чтобы узнать, когда скрыто представление из-за скрытого предка. Я прибегал к проверке полного пути просмотра, а не только для проверки скрытого свойства представления. Неловко, но работает –
Вы можете создать расширение для UIView с помощью метода hiddenBySuperview, который вернет TRUE, если представление было скрыто, или если какой-либо из его списков вверх по цепочке был скрыт. (Убедитесь, что вы его кодируете, чтобы обрабатывать случай, когда представление не имеет каких-либо наблюдений. В этом случае метод просто вернет свой собственный скрытый флаг.) –