размер объекта UIView, возвращаемый как ноль при автомакете

Я переписываю приложение под IOS6 с авторазметкой, но у меня проблемы с доступом к размеру подкласса UIView

@property (weak, nonatomic) IBOutlet MyView *myView1;

in

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    NSLog(@"myView1: %@",self.myView1);
}

Размер UIView полностью определен в StoryBoard, но при запуске кода выходит равным нулю. Это связано с автоматической компоновкой или подвид просто еще не определен? Я делаю что-то принципиально неправильное здесь?


person drw    schedule 03.01.2013    source источник


Ответы (2)


Только что нашел один возможный ответ здесь. Запуск методов

[self.view setNeedsLayout];
[self.view layoutIfNeeded];

вызывает вычисление размеров UIViews, в результате чего ожидаемые значения появляются в журнале, а также становятся известны самому подклассу UIView.

person drw    schedule 03.01.2013
comment
Мы можем получить реальный размер сразу после [self.myView1 layoutIfNeeded]. - person Jaybo; 30.03.2015

Я только что напечатал кадр подвида.

Это было 0 в viewDidLoad.

У него было ненулевое значение внутри обратного вызова viewDidLayoutSubviews.

Внутри viewDidLoad вы должны ожидать только, что значение view контроллера представления будет ненулевым. Внутри viewDidLoad на самом деле иногда вы добавляете подвиды и прочее. Поэтому неправильно ожидать, что кадр будет рассчитан в том самом обратном вызове, который вы устанавливаете для него.

По сути, нужно понимать, что сначала рисуется viewController, а затем, когда он проходит через события своего жизненного цикла, его подпредставления будут выложены.

person Honey    schedule 24.08.2020