Невероятно, но порядок просмотра раскадровки не соблюдается для представлений контейнера, исправить?

Взгляните сюда... https://stackoverflow.com/a/34736594/294884

введите здесь описание изображения

в iOS порядок, в котором вы размещаете одноуровневые представления в Инспекторе в раскадровке, конечно же, становится их z-порядком.

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

Для проверки просто создайте сцену с несколькими одноуровневыми представлениями; пара из них — контейнерные представления. Бегать. Измените что-нибудь невинное в классе контроллеров представления контейнера (скажем, добавьте ViewDidLoad, ограничение или оператор печати) и повторите попытку. Представления представления контейнера случайным образом перемещаются вверх.

Я считаю, что единственный обходной путь: вручную расставить их по порядку в представленииWillAppear, что безумно.

1) может быть, я просто что-то напортачил - может быть, есть настройка ("соблюдать порядок раскадровки - даже для представлений контейнера!")

2) Я ломал голову, пытаясь понять, как «автоматизировать» обходной путь. Вам нужно будет прочитать порядок всех представлений из раскадровки по мере ее загрузки? А затем «исправить» это во время viewWillAppear. Сложный.

3) может быть какая-то хитрость .. в prepareForSegue скажем? .. заставить их быть в правильном Z-порядке, как и любой вид!??


Исправление...

Одно нелепое исправление для этого только что пришло мне в голову.

Скажем, у вас есть участок раскадровки с 10 одноуровневыми представлениями, и, скажем, 4 из них являются представлениями-контейнерами. (Таким образом, на самом деле это не будет работать — как описано здесь.)

На самом деле, сделайте так, чтобы даже эти четыре представления были просто (бессмысленными) обычными UIView, которые являются держателями для представлений-контейнеров. Сосать!


person Fattie    schedule 08.06.2016    source источник
comment
Это может быть особый случай, но часто, когда у меня возникают проблемы с Z, я вручную переупорядочиваю оскорбительный вид в раскадровке, а затем возвращаю его туда, где вы хотите, это часто решает проблему.   -  person GetSwifty    schedule 05.10.2017
comment
правильно, это на самом деле особый случай - если это представление контейнера, система iOS глючит (я не проверял последнюю версию iOS/Xcode)   -  person Fattie    schedule 05.10.2017


Ответы (1)


Это странно.

Что, если вы поместите каждое представление контейнера внутри обычного UIView, при этом все края представления контейнера будут прикреплены к обычному UIView? Ставлю 5 баксов, что это исправит.

person Duncan C    schedule 08.06.2016
comment
привет Дункан - точно, GMTA! :) обратите внимание на мой A Fix... в конце. Да вообще странно. Если подумать, то, конечно же, это как-то связано с тем, когда происходят переходы. (Я заметил, слегка изменив код и т. д. в различных контроллерах представлений контейнеров, это может изменить случайный порядок.) Странно, верно? Помимо всего прочего, удивительно, что орды разгневанных программистов этого не заметили (заставляет меня думать, что это может быть как-то по моей вине??) - person Fattie; 08.06.2016
comment
Я предполагаю, что вы замечаете изменение порядка z только тогда, когда представления перекрываются, и это либо влияет на то, как они перекрываются визуально, либо пользователю нужно щелкнуть, а одно представление блокирует клики на другое. Я не думаю, что раньше использовал представление контейнера таким образом, так что мне повезло. - person Duncan C; 08.06.2016
comment
Привет @duncanC. еще раз спасибо, что посмотрели это тогда. Я так и не нашел исчерпывающего объяснения всему этому - некоторые проблемы, в которые просто нет времени вникнуть! Как вы говорите, предложенное вами исправление определенно устраняет его (при условии, что это реальная проблема, а не какой-то артефакт того, что я делал тогда). Ваше здоровье! - person Fattie; 30.06.2016