Разметка подкласса UITableViewCell испорчена в отключенной автоматической раскадкой

Я создал табличный вид с ячейками прототипов в раскадровке с "Использовать автозапуск", не установленным в Xcode 5.

Ячейки являются подклассами UITableViewCell, в основном для добавления IBOutlets и без кода внутри. Результатом является испорченный макет. Я попробовал изменить маски Autoresizing без везения. Также попробовал этот.

Если я, однако, реализую пустой layoutSubviews, он отображается в порядке. Любая идея о том, что происходит? Является автомаршрутом, несмотря на его снятие флажка?

Edit:

Подробнее...

@interface SettingDefaultTableViewCell : UITableViewCell

@property (nonatomic, weak) IBOutlet UILabel *label;
@property (nonatomic, weak) IBOutlet UIImageView *imageView;
@property (nonatomic, weak) IBOutlet UIView *backgroundView;

@end

@implementation SettingDefaultTableViewCell

- (void)layoutSubviews
{
    // Emtpy implementation to fix weird layout bug
}

@end

Раскадровка с отключенным автоопределением:

enter image description here

Результат, когда layoutSubviews исправлено выше, не используется:

enter image description here

Изменить 2:

  • Ячейка настроена на неавторизовать подзаголовки.
  • В то время как вышеприведенного должно быть достаточно, чтобы предотвратить автоматическую настройку subviews, все маски авторезистирования устанавливаются только для гибкого правого и нижнего полей.
  • Только маркеp > установлен на гибкое левое поле. Гибкая ширина или высота.

Ответы

Ответ 1

Ячейка модифицируется недокументированным UITableViewCell layoutSubviews:

  • Несмотря на то, что не задано отсутствие подпроцессов с автоматизацией, реализация по умолчанию меняет кадр backgroundView.
  • Он также перемещает imageView ( " > " ) влево, несмотря на то, что он настроен как ячейка пользовательского стиля.

Таким образом, избегая выполнения super layoutSubviews, он исправляет его.