Как программно создать представление и установить его кадр в соответствии с суперпредставлением? (Iphone)
Я полностью потерян с superview, loadView(), viewDidLoad(), viewWillAppear().
В конце концов, я хочу установить рамку моего контроллера в границы superview и использовать [self.view bounds] в моем viewDidLoad(). (может быть, это невозможно?)
вот фрагмент кода, который дает мне горе..
// add the controller's view to the scroll view
if (nil == controller.view.superview) {
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * page;
frame.origin.y = 0;
controller.view.frame = frame;
[scrollView addSubview:controller.view];
// I'd like to set controller.view 's frame using superview(scrollView here).
}
Очевидно, что nil == controller.view.superview вызывает viewDidLoad контроллера.
Я использовал для доступа к [self.view bounds] и использовал его внутри моего viewDidLoad
Поскольку я хочу установить фрейм вида после добавления его в суперпредставление, я думаю, мне нужно переместить коды, которые используют [self.view bounds], куда-нибудь еще.
Какое хорошее место для переезда? Или есть лучший подход?
2 ответа
Первый звонок controller.view
а также self.view
автоматически запускает механизм загрузки представления и уведомление viewDidLoad для каждого контроллера представления (я предполагаю, self
это другой контроллер представления). Таким образом, методы viewDidLoad для каждого контроллера будут вызываться в начале этого фрагмента кода.
(loadView
это метод для вас, чтобы вручную переопределить процесс загрузки представления. Вы не должны называть это напрямую)
Я подведу итог проблемы и моего решения.
Проблема, по сути, в том, что порядок двух вызовов функций: viewDidLoad и addSubview не может быть переключен.
Что я хочу это
установить рамку child в соответствии с superview, что можно сделать только после addSubview.
Но в то же время у viewDidLoad у меня есть [границы самообзора].
Поскольку viewDidLoad должен вызываться до addSubview, viewDidLoad не сможет иметь правильную информацию [self.view bounds].
Решение, я объявил переменную superViewBounds и установил их после выделения контроллера представления, но перед созданием представления. И использовал переменную bounds внутри viewDidLoad.
Остается одна вещь, я до сих пор не знаю, как я мог получить основной вид (я думаю, это называется навигационный вид) информацию о границах / фреймах navigationViewController.
Надеюсь, что это поможет, и надеюсь, что кто-то опубликует лучшее решение, если оно есть.