2016-08-16 4 views
0

Для начала, вот макет макета, который я пытаюсь выполнить в Swift. MockupПроблема с ограничениями UIView

А вот то, что я до сих пор, Error

Так вот проблема. Обратите внимание, что во втором изображении переполнение зеленого UIView превышает высоту TableViewCell.

В моем классе Main TableViewController я определил каждую ячейку высотой 120 пикселей, а зеленый UIView 10 пикселей меньше высоты ячейки с 10 пикселями сверху как разделитель между последующими ячейками.

Cell определение высоты:

var itemHeight = [CGFloat](count: 2, repeatedValue: 120.0) 

UIView ограничения:

foregroundView.topAnchor.constraintEqualToAnchor(foregroundView.superview?.topAnchor, constant: 10).active = true 
    foregroundView.leftAnchor.constraintEqualToAnchor(foregroundView.superview?.leftAnchor, constant: 20).active = true 
    foregroundView.widthAnchor.constraintEqualToAnchor(foregroundView.superview?.widthAnchor, constant: -40).active = true 
    foregroundView.heightAnchor.constraintEqualToConstant(110).active = true 

Любые идеи о том, что может быть причиной переполнения UIView? Спасибо заранее!

Пожалуйста, дайте мне знать, если вы хотели бы видеть код в контексте :)

+0

Почему вы не используете Autolayout для создания ячеек? – Harsh

+0

Я мог бы быть, но я хотел бы знать, что стоит за этой проблемой с существующим кодом :) – BlackDeveraux

+0

Можете ли вы также поделиться кодом, в котором вы добавляете представление переднего плана, а другим вопросом будет тот, в каком методе вы добавляете ограничения? – Harsh

ответ

0

Удалите две строки кода из проекта:

foregroundView.layoutIfNeeded() 

И

containerView.layoutIfNeeded() 

Они заставляют несвоевременно выкладывать контент, который вызывает вашу проблему.

+0

Удаление этого фрагмента кода работало отлично! В качестве побочного вопроса: функция _layoutIfNeeded() _ вызывает немедленное переименование всех представлений и подзаголовков. Вы говорите, что функция вызывает несвоевременную компоновку, означает ли это, что функция называется слишком ранним/поздним или она не нужна? Заранее спасибо! – BlackDeveraux

+0

При работе с представлениями таблиц в разное время происходит много перерисовки, повторное использование ячеек и т. Д. Поэтому мое предположение заключается в том, что немедленный вызов части макета через прокладку всего представления и всех его компонентов вызывает проблему , В то время как 'setNeedsLayout()', ожидающий следующего цикла компоновки, удалит проблему, фактически сам Auto Layout обрабатывает эту ситуацию, и поэтому не требуется. – sketchyTech

Смежные вопросы