Подтвердить что ты не робот

Ошибка автоматической компоновки

У меня была аналогичная проблема с этим плакатом. И я использовал предложение jrturton, чтобы переместить код для настройки кнопок в viewDidLayoutSubviews. Он работал хорошо, пока не получил эту ошибку:

"NSInternalInconsistencyException", причина: "Автоматическая компоновка" требуется после отправки -viewDidLayoutSubviews в контроллер вида. Реализация ViewController должна отправлять -layoutSubviews в view, чтобы вызвать автоматическое расположение. '

Я очень неуловим в отношении графики, и единственное, что я мог придумать, это положить [self.view layoutSubviews];, но это ничего не исправить. Он работал, когда я снял флажок "Автоматический макет" в своей раскадровке, но это изменило размеры моих кнопок, и мне было интересно, есть ли другой способ исправить его?

код:

-(void)viewDidLayoutSubviews {
    NSArray *arrayOfButtons = [NSArray arrayWithObjects:self.decimalButton, self.buttonOne, self.buttonTwo, self.buttonThree, nil];

    for (UIButton *button in arrayOfButtons) {

        [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];

        button.layer.borderWidth = 0.25f;
        button.layer.borderColor = [[UIColor grayColor] CGColor];

        CAGradientLayer *btnGradient = [CAGradientLayer layer];
        btnGradient.frame = button.bounds;
        btnGradient.colors = [NSArray arrayWithObjects:
                              (id)[[UIColor colorWithRed:122.0f / 255.0f green:188.0f / 255.0f blue:255.0f / 255.0f alpha:1.0f] CGColor],
                              (id)[[UIColor colorWithRed:96.0f / 255.0f green:171.0f / 255.0f blue:248.0f / 255.0f alpha:1.0f] CGColor],
                              nil];
        [button.layer insertSublayer:btnGradient atIndex:0];
    }
}
4b9b3361

Ответ 1

У меня была эта проблема недавно, когда я хотел программно настроить фрейм представления, созданного раскадрой, предоставив обработчик сообщения viewDidLayoutSubviews. После инструкции из сообщения исключения я попытался добавить [self.view layoutIfNeeded] в конце -viewDidLayoutSubviews, а затем он сработал.