Куда поместить ручной код макета (или где его инициировать) для определенного дочернего UIView У меня есть, когда сами родительские представления используют автозапуск?где ввести ручной код макета для UIView, где родительские представления используют автозапуск?
Примечание:
- код макет для представления необходимо использовать его размеры кадра после любого родительского вида макета, изменения ориентации, признак изменения и т.д.
- я попытался с помощью viewWillLayoutSubviews на материнской ViewController, но имели трудности, когда он назывался более одного раза в разы - не могли отследить, почему, однако, НЕ хотят выполнять ручные вычисления раскладки более одного раза, поскольку они обременительны.
- Так общий способ для различных сценариев ниже в итоге только один сингл «запуска» ручного макета И в то время, когда все вращения & родительский компоновщик представление было сделано:
Итак:
- на нагрузке (viewDidLoad)
- восстановить изображение (например, вид действительно появлялся впоследствии)
- вращение
- признака ч Анж
Например я должен смотреть на пути для:
а) родительский вид контроллера для управления этим и определить, когда для отправки «layoutSubviewNow» призыв к моему конкретной точке зрения ребенка (который выходившее это собственный viewcontroller), но в этом случае, как это сделать, или b)
b) оставляя дочернее представление реагировать на «layoutSubview()», а затем имеет делегат для вызова на главный контроллер запросить данные компоновки ?, или
c) аналогично b), но с использованием детского вида s viewWillLayoutSubviews() ", чтобы вызвать, а затем предоставить делегату возможность перезвонить на главный контроллер для запроса данных макета?
или другой?
на самом деле я думаю об этой идее:
г) в главном контроллере родительского вида: иметь переменную viewTransistionedOutstandingAction экземпляра, и использовать его таким образом, что (я) в viewWillTransition установить это верно, то в (II) viewWillLayoutSubviews сделать следующее:
if viewTransistionedOutstandingAction {
self.triggerModelChange()
viewTransistionedOutstandingAction = false
}
Независимо от того, что вы хотите достичь, объясните с помощью скриншота или фрагмента кода. То, что вы объясняете выше, может быть понято вами только потому, что вы знаете, какой результат вы хотите. Просто, если кто-то выберет любой концептуальный ответ, тогда это может быть неправильно для вашей проблемы. –
Хорошо. Может быть, какой-нибудь псевдокод – Greg
вы можете сказать мне просто, вы хотите, чтобы триггерную функцию вызывали один раз после любого изменения ограничения макета в контроллере? это то, чего ты хочешь? –