2016-09-18 2 views
0

«Скрытое» свойство 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 <<<<<<<<<<<<<<<<<<<< 

ответ

0

Каждая подтаблица имеет собственную скрытые свойства. Если родительский вид имеет скрытое свойство, равное true, а некоторые из его подзонов также помечены как скрытые, когда вы меняете скрытый флаг родителя на FALSE, родительский и его не скрытые дети станут видимыми, но скрытые дети не будут ,

Я не знаю, как определить, действительно ли ребенок не скрыт, не поднимаясь над деревом супервизора, проверяя скрытый статус всех родительских представлений. Даже это не гарантирует, что это видно, поскольку оно может быть обрезано границами родителя, или оно может иметь слой маски, или его непрозрачность может быть равна нулю или, возможно, несколько других вещей.

+0

Я больше беспокоюсь о том, чтобы узнать, когда скрыто представление из-за скрытого предка. Я прибегал к проверке полного пути просмотра, а не только для проверки скрытого свойства представления. Неловко, но работает –

+0

Вы можете создать расширение для UIView с помощью метода hiddenBySuperview, который вернет TRUE, если представление было скрыто, или если какой-либо из его списков вверх по цепочке был скрыт. (Убедитесь, что вы его кодируете, чтобы обрабатывать случай, когда представление не имеет каких-либо наблюдений. В этом случае метод просто вернет свой собственный скрытый флаг.) –

Смежные вопросы