Неверное представление предупреждения и нечетное поведение с пользовательским представлением IB_DESIGNABLE с использованием автоматической компоновки

Я создаю индивидуальное представление IB (см. Код ниже), который правильно отображается в IB, а также отлично работает при его запуске. Однако, чтобы получить это предупреждение о неуместном представлении, и я не могу вручную изменить размер представления в Interface Builder (при касании дескриптора изменения размера в нем будет отображаться представление).

Я получаю то же или подобное поведение для всех видов разных макетов. У вас есть идея, если я делаю что-то неправильно здесь, или это просто ошибка в IB?

(PS: Я не могу просто игнорировать предупреждение)

Предупреждение о неправильном представлении

EDIT: добавлен скриншот ограничений:

Ограничения

Вот код (заголовок):

IB_DESIGNABLE @interface AKATestView : UIView @end 

Реализация:

 @interface AKATestView() @property(nonatomic)BOOL subviewsCreated; @property(nonatomic)BOOL subviewConstraintsCreated; @property(nonatomic)NSDictionary* views; @end @implementation AKATestView - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { [self setupAfterInit]; } return self; } - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self setupAfterInit]; } return self; } - (void)setupAfterInit { [self createSubviews]; } - (void)createSubviews { if (!self.subviewsCreated) { self.translatesAutoresizingMaskIntoConstraints = NO; UILabel* labelView = [[UILabel alloc] initWithFrame:CGRectZero]; labelView.text = @"Name"; labelView.translatesAutoresizingMaskIntoConstraints = NO; [self addSubview:labelView]; UITextField* textField = [[UITextField alloc] initWithFrame:CGRectZero]; textField.borderStyle = UITextBorderStyleRoundedRect; textField.placeholder = @"Enter some text"; textField.translatesAutoresizingMaskIntoConstraints = NO; [self addSubview:textField]; UILabel* errorMessageLabel = [[UILabel alloc] initWithFrame:CGRectZero]; errorMessageLabel.text = @"Error message"; errorMessageLabel.translatesAutoresizingMaskIntoConstraints = NO; [self addSubview:errorMessageLabel]; self.views = @{ @"label": labelView, @"editor": textField, @"errorMessageLabel": errorMessageLabel }; self.subviewsCreated = YES; [self setNeedsUpdateConstraints]; } } - (void)updateConstraints { if (!self.subviewConstraintsCreated) { NSDictionary* metrics = @{ @"pt": @(4), @"pr": @(4), @"pb": @(4), @"pl": @(4), @"labelWidth": @(100), @"errorPl": @(4 + 100 + 4), @"hsLabelEditor": @(4), @"vsEditorError": @(2) }; NSArray* specs = @[ @{ @"format": @"H:|-(pl)-[label(labelWidth)]-(hsLabelEditor)-[editor]-(pr)-|", @"options": @(NSLayoutFormatAlignAllFirstBaseline) }, @{ @"format": @"V:|-(pt)-[editor]-(vsEditorError)-[errorMessageLabel]-(pb)-|", @"options": @(NSLayoutFormatAlignAllLeading|NSLayoutFormatAlignAllTrailing) } ]; for (NSDictionary* spec in specs) { NSString* format = spec[@"format"]; NSUInteger options = ((NSNumber*)spec[@"options"]).unsignedIntegerValue; NSArray* constraints = [NSLayoutConstraint constraintsWithVisualFormat:format options:options metrics:metrics views:self.views]; [self addConstraints:constraints]; } self.subviewConstraintsCreated = YES; } [super updateConstraints]; } @end 

Попробуйте удалить self.translatesAutoresizingMaskIntoConstraints = NO; в вашем методе createSubviews . Кажется, что IB полагается на этот перевод, чтобы придумать правильное измерение для дизайнера. У меня была одна и та же проблема, и это было исправлено.

Я все еще translatesAutosizingMaskIntoConstraints в NO для subviews. Я подтвердил, что никаких дополнительных ограничений, сгенерированных даже при этом наборе, нет. Надеюсь, это так и для вас!

  • Не удалось запустить приложение в Simulator XCode 6.0
  • iOS Framework, внедрить другую структуру или библиотеку?
  • Импортировать файл LocalAuthentification.framework в iOS 7.1
  • Невозможно добавить панель навигации в сцену: проблема с контроллером Root?
  • дублирующий символ для архитектуры x86_64
  • Добавить ссылку на проект проекта Swift iOS XCode и отладить
  • Xcode 6.0.1 - iOS Simulator Black Screen
  • Jenkins - xcodebuild connection peer отказался от запроса канала для dtxproxy: XCTestManager_IDEInterface
  • перетаскивание изображений вокруг экрана с помощью быстрых
  • Класс размера для идентификации iPhone 6 и iPhone 6 плюс портрет
  • Можно ли наследовать от основного класса в Objective-C (Xcode / iOS)?
  • Давайте будем гением компьютера.