2014-02-11 5 views
0

У меня есть класс, который инициализируется сначала без набора кадров - ClassA ниже. Экземпляр ClassA НЕ устанавливается с автозапуском. Это кадр устанавливается вручную позже. Тем не менее, я хочу, чтобы subview ClassA был автоматически выложен. Проблема в том, что я не могу найти правильный способ сделать это. Если я попытаюсь установить ограничения перед вызовом layoutSubview (перед установкой рамки), ограничения не будут проверяться. Если я попытаюсь настроить их после вызова Super в layoutSubviews, я получаю этоiOS - Пытаюсь установить Autolayout на subviews в layoutSubviews

Автомакет по-прежнему требуется после выполнения -layoutSubviews. Реализация GHTExerciseSetView -layoutSubviews требует вызова super.

Если я попытаюсь установить ограничения после вызова Супер (что не кажется правильным в любом случае), похоже, это работает сначала, но когда я начинаю добавлять дополнительные экземпляры ClassA и перерисовки, у меня возникают больше проблем с ограничения не проверяются. Главный вопрос - это то, что является правильным способом представления макетов таким образом. Благодарю.

@interface ClassA() 

@property (nonatomic, strong) SubView1 *sub1; 
@property (nonatomic, strong) SubView2 *sub2; 


@end 

@implementation ClassA 

//this is called initially with no frame 
- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     sub1 = [[SubView1 alloc] init]; 
     sub1.translatesAutoresizingMaskIntoConstraints = NO; 
     [self addSubView:sub1]; 

     //Same for sub2 

} 
return self; 
} 

- (void)layoutSubViews { 
    [super layoutSubViews]; 
} 

- (void)updateConstraints { 
    [super updateConstraints]; 

    //sub1 and sub2 constraints 
} 
+0

Можете ли вы показать, как должно выглядеть представление с ограниченными подзонами. то есть, как должны быть размещены подпрограммы и т. д. ... – Fogmeister

ответ

0

Я предполагаю, что ваши ограничения настроены правильно.

После того, как вы создали иерархию вида в initWithFrame:, попробуйте отправить updateConstraintsIfNeeded на номер self. Выполнение этого в моем собственном приложении, похоже, помогло решить некоторые проблемы.

Кроме того, updateConstraints может вызываться несколько раз, поэтому убедитесь, что вы не устанавливаете одни и те же ограничения снова и снова.

Смежные вопросы