Как программно создать представление и установить его кадр в соответствии с суперпредставлением? (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.

Надеюсь, что это поможет, и надеюсь, что кто-то опубликует лучшее решение, если оно есть.

Другие вопросы по тегам