Неверное представление предупреждения и нечетное поведение с пользовательским представлением 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 

One Solution collect form web for “Неверное представление предупреждения и нечетное поведение с пользовательским представлением IB_DESIGNABLE с использованием автоматической компоновки”

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

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

  • Alamofire RED в проекте Xcode - Файл Alamofire.framework отсутствует
  • Файл не может быть открыт, потому что у вас нет разрешения
  • Как заставить изображения запуска вместо запуска экрана на iOS 8?
  • Вход в Facebook и Google+
  • Cocoapods не может найти заголовок xcode 6
  • Как установить заголовок панели навигации в раскадровке?
  • Тестирование блоков XCode 6 без построения
  • Время выполнения для выбранного устройства не установлено.
  • Во время работы возникла ошибка (Domain = LaunchServicesError, Code = 0)
  • Переключение между текстовыми полями при нажатии клавиши возврата в Swift
  • Интервал между ячейками UICollectionView на основе размера экрана устройства
  • Interesting Posts

    Использование Firebase Analytics и Google Analytics вместе – iOS

    isBeingDismissed не установлен в viewWillDisappear:

    Как использовать Realm (установленный с Carthage) с каркасом в приложении Swift?

    Как исправить предупреждение: представление не находится в иерархии окон

    создание pagingmenucontroller с видом, скользящим быстрым

    iOS Airplay – «Игра на вашем телевизоре»

    Безье и маскировка

    iOS: Можно ли одновременно отправлять аудиовыход и на наушники и динамики?

    Почему этот код сбой в iOS 5.1, но не iOS 6?

    iOS: кнопка для доступа к следующей ячейке Tableview

    замените все красные пиксели в изображении яблока зеленым зеленым цветом, включая градиентные красные ios

    UILabel усекается, даже если он имеет оставшиеся строки

    UIScrollView и контент с элементами touch touch

    Создание «липкого» элемента фиксированной позиции, который работает на iOS Safari

    UITableViewCellAccessoryCheckmark не отображается в iOS 7

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.