Я определил пользовательский вид в файле NIB и хотел бы создать экземпляр в StoryBoard, но у меня возникли проблемы с автозапуском.Проблемы с AutoLayout с пользовательскими представлениями, определенными в файле NIB и используемыми в StoryBoard
В простом примере пользовательский вид имеет единую метку с фиксированным размером и центрирован как по вертикали, так и по горизонтали, все с использованием автозапуска.
Владелец файла устанавливается в мой класс, он имеет выход на вид сверху. При осуществлении вида в я:
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if(self)
{
[[NSBundle mainBundle] loadNibNamed:@"FMCompassView" owner:self options:nil];
[self addSubview:self.topView];
}
return self;
}
Теперь в моей раскадровке добавить UIView, установите это класс моего пользовательского класс и макет его размер и расположение на моей странице, снова используя autolayout.
И мой виджет установлен и размер правильно, но его содержание не изменяется, как показано ниже:
Я пытался добавить больше ограничений после загрузки из СИБ, что-то вдоль линий:
UIView* subV = self.topView;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(subV);
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[subV]|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:viewsDictionary]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[subV]|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:viewsDictionary]];
Но это вызывает недопустимые ограничения компоновки.
Любые идеи о том, как заставить это работать?
Cheers!
думаю, что я нашел причину: представление, созданное при загрузке NIB, должно быть сказано, чтобы не преобразовывать маску автоматического изменения в ограничения, * EVEN *, если содержимое NIB фактически создано с включенным автозапуском. Итак, после загрузки NIB и перед добавлением его верхнего вида в пользовательское представление мне нужно позвонить: '[self.topView setTranslatesAutoresizingMaskIntoConstraints: NO];' – mkrus
Вы можете найти правильный ответ здесь: http://stackoverflow.com/а/34524346/971329. См. Мой комментарий ниже для быстрой реализации многократного просмотра, который заботится обо всех вещах. – blackjacx