2015-01-24 3 views
1

У меня странная проблема с раскадровки. Я реорганизую свой код приложения, чтобы воспользоваться преимуществами автоматического измерения высоты строки вместо метода UITableViewDelegate. Моя камера очень проста - у нее есть только один ребенок - UIView. Я добавил ограничения:Раскадровка конфликтующих ограничений для UITableViewCell при использовании динамической высоты

enter image description here

и у меня есть конфликт ТРУДНОСТИ: enter image description here

но на тренажере все работает довольно хорошо, и у меня нет каких-либо ограничений, предупреждений в консоли.

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

+0

Если высота UITableViewCell не равна 63, три ограничения конфликтуют :). Вы упомянули «изменение размеров ячейки», поэтому я предполагаю, что высота поднабора должна быть переменной. В этом случае вы можете попытаться удалить ограничение высоты (50). –

+0

Я не хочу устанавливать установленную явно высоту UITableViewCell. Я хочу, чтобы autolayout определял это значение из высоты просмотров, которые являются дочерними элементами UITableViewCell. – MichalMoskala

+0

Я вижу. Конфликты, отображаемые в раскадровке, могут быть из настройки «Table View Cell» - height. Как сказано выше, оно должно быть 63 (если для параметра «Сепаратор» установлено значение «Нет»), то правильное значение равно 64. –

ответ

3

Ближайший сосед к вашему view.bottom - 12 для представления в ячейке, который является супервидом.Bottom.Margin (или представление содержимого ячейки). Вы запрашиваете у view.bottom ограничение 8. Кроме того, чтобы удовлетворить эти ограничения, построителю интерфейса необходимо изменить высоту представления (синий в вашем примере). это, конечно, не может быть сделано, потому что существует ограничение, ограничивающее высоту представления 50.

Чтобы исправить это, чтобы скомпоновать номера, изменить высоту ячейки представления таблицы на 80 вместо значения по умолчанию 84. Но если вы намереваетесь динамически изменять высоту ячейки таблицы, вы можете столкнуться с большими проблемами ограничения.

Или измените ограничение «Вертикальное пространство- (8) -Содержание вида», чтобы иметь константу 12. Таким образом, это будет «Вертикальное пространство - (12) -« Просмотр содержимого ». Опять же, если вы измените высоту ячейки таблицы динамически, у вас будут проблемы.

Вы намерены сосредоточить взгляд на ячейке таблицы? если это случай, то удалите два вертикальных ограничения и добавьте ограничения выравнивания центра y. Затем, когда вы меняете высоту ячейки, вид будет центрировать себя вертикально, вычисляя, каковы должны быть верхние и нижние ограничения.

Ниже приведен пример проекта я создал:

#import "testLayoutControllerTableViewController.h" 

@interface testLayoutControllerTableViewController() 
@property (weak, nonatomic) IBOutlet UITableView *thetable; 
@end 

@implementation testLayoutControllerTableViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return 10; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellid"]; 
    return cell; 
} 

@end 

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

+0

Откуда вы получили значение 12? – MichalMoskala

+0

Я добавил y ограничение как вертикальный центр contentView, но в этом случае высота строки меньше, чем синий, когда я запускаю его в симуляторе. – MichalMoskala

+0

, когда вы пытаетесь добавить нижнее ограничение в представление. предлагаемые значения представляют собой пробелы для ближайшего соседа. Для нижнего его предложено 12 – antonkronaj