Добавление ограничения в UITableVIEW headerview

Поэтому я новичок в ограничениях.

У меня есть файл nib, который содержит несколько представлений в качестве братьев и сестер. Представление ViewController содержит tableView, и у меня есть другое представление, которое будет добавлено в tableHeaderView (назовем его self.tableHeaderView).

Проблема, с которой я сталкиваюсь, заключается в том, что я хочу изменить размер self.tableHeaderView на основе определенных условий. Я добавил ограничения ко всем моим элементам пользовательского интерфейса, и по какой-то причине я не могу добавить ограничение высоты в self.tableHeaderView через nib.

Я попытался изменить фрейм self.tableHeaderView программно, но это не имеет никакого эффекта, когда я запускаю код в симуляторе, что имеет смысл, потому что, если я использую Auto-layout, он должен игнорировать изменения кадра.

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

Это часть кода, которую я должен добавить для ограничения высоты.

[self.tableHeaderView addConstraint:[NSLayoutConstraint constraintWithItem:self.tableHeaderView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:107.0f]]; 

Исключением я получил: *** Ошибка утверждения в – [UITableView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2903.2/UIView.m:8536


* Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Автоматическая компоновка по-прежнему требуется после выполнения -layoutSubviews. Реализация UITableView -layoutSubviews требует вызова super. '*

В худшем случае я добавлю еще один вид собора со второй высотой и дублирую элементы пользовательского интерфейса, но я хочу избежать этого.

Файловая структура Nib

Редактировать 1: я получаю это исключение, когда у меня это self.topicHeaderView.translatesAutoresizingMaskIntoConstraints = NO;

Если у меня его нет, я получаю это

Невозможно одновременно удовлетворить ограничения. Вероятно, хотя бы одно из ограничений в следующем списке – это тот, который вы не хотите. Попробуйте это: (1) посмотрите на каждое ограничение и попытайтесь выяснить, чего вы не ожидаете; (2) найти код, который добавил нежелательные ограничения или ограничения и исправить его. (Примечание. Если вы видите NSAutoresizingMaskLayoutConstraints, которые вы не понимаете, обратитесь к документации для свойства UIView, переводимой в AutoreizingMaskIntoConstraints) ("", "")

Попытаться восстановить, нарушив ограничение

Перерыв на objc_exception_throw, чтобы поймать это в отладчике. Методы в категории UIConstraintBasedLayoutDebugging для UIView, перечисленные в разделе, также могут быть полезны.

Редактировать: 2 На 4-дюймовом экране он выглядит хорошо (красный фон покрывает весь столHeaderView, как я ожидал) 4 "Симулятор

На 3,5-дюймовом экране красный фон (который применяется на наконечнике, простирается до определенной высоты, даже если я устанавливаю высоту 117.0f. Элементы пользовательского интерфейса, которые находятся внутри таблицыHeaderView, отображаются правильно)

3.5 "экран

Синяя линия внизу – это разделительная линия, а синяя рамка вокруг таблицыHeaderView.

2 Solutions collect form web for “Добавление ограничения в UITableVIEW headerview”

Когда вы добавляете представление в виде верхнего или нижнего колонтитула в представление таблицы, вы не можете использовать ограничения для этого представления, но только внутри него. Кроме того, представление должно быть в верхней части иерархии (как и у вас), если вы переместите его как подпункт в другое представление, это даст ту же ошибку.

Вы можете изменить высоту представления непосредственно в коде, установив тот же фрейм с измененной высотой. Это работает нормально.

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

 tableView.tableHeaderView.frame = ...; tableView.tableHeaderView = tableView.tableHeaderView; 

У меня была та же проблема, я не мог использовать ограничения для tableHeaderView.

Затем я создал другой subView для создания ограничений.

 // 1 - create a header view and a subHeaderView UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, bounds.size.width, bounds.size.height - 64.f)]; headerView.backgroundColor = [UIColor blackColor]; tableView.tableHeaderView = headerView; UIView *subHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, bounds.size.width, bounds.size.height - 64.f)]; [headerView addSubview:subHeaderView]; // 2 - add constrainedView to subHeaderView (Eg) UIView *constrainedView = [UIView new]; [constrainedView setTranslatesAutoresizingMaskIntoConstraints:NO]; [subHeaderView addSubView:constrainedView]; // 3 - addConstraints of subviews into subHeaderView (Eg) [subHeaderView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[constrainedView]|" options:0 metrics:metrics views:views]]; [subHeaderView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[constrainedView]|" options:0 metrics:metrics views:views]]; 

Это работает над моим проектом, iOS 7.0 / Xcode 5.0.2

  • Получить имя Nib / Что такое nib?
  • неправильный размер кадра в viewDidLoad
  • Использование нескольких файлов nib с одним контроллером представления?
  • Способ поиска потерянных изображений в большом проекте Xcode
  • IBOutlets ноль на устройствах iOS 8, но отлично работают на iOS 9 (Swift)
  • UIView в nib ноль на iPad, а не ноль на iPhone
  • Почему анимация CALayer работает после загрузки изображения, но не только после инициализации?
  • Как нажать UIViewController с файлом NIB
  • Стиль UIView по умолчанию имеет закругленные углы?
  • Загрузка пользовательского UIView из nib, все подпункты, содержащиеся в nib, равны нулю?
  • Имя initWithNibName UIViewController: причина этого дизайна?
  • Interesting Posts

    Имитировать жест встряхивания с тестированием Swift 2.0 UI

    WCErrorCodeDeliveryFailed: полезная нагрузка не может быть доставлена

    Cocoapods: какой лучший способ изменить ресурсы

    iPhone – Как определить целевую версию iOS для развертывания существующего проекта

    Цель C – как добавить число в конец другого номера?

    понимание схем xCode

    Частный API iOS для доступа к исходному входу от микрофонных шумоподавляющих микрофонов на iPhone?

    Перерисовать настраиваемый UIButton после щелчка

    Как я могу заставить свое приложение отображаться в UIActivityViewController для текста?

    Тестирование Автообновление покупки в приложении в среде песочницы

    достижимостьWithHostName timeout

    Динамическая ссылка на открытую черную страницу ios

    Проект Xcode, не показывающий список тренажеров

    Ошибка CloudKit с использованием watchOS 3

    Вычислить расстояние между местоположением пользователя и фиксированным местоположением

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