У меня есть таблица и кнопка в UIScrollView, и я хочу следующий дизайн:
- Кнопка имеет значение как минимум 40 пунктов ниже последней строки таблицы
- Кнопка всегда 83 пункта над концом просмотра
С учетом приведенных ниже ограничений мне удалось сделать кнопку всегда 40 пунктов ниже последней строки таблицы и на 83 пункта выше конца обзора, только если таблица достаточно длинная. Мне кажется, что приоритет для bottomConstraint
неправильно переопределяет ограничение topConstraint
. Я установил вид прокрутки, чтобы охватить весь экран.
/* - Sign Out button is 40 pts tall - */
let heightConstraint = NSLayoutConstraint(item: signOutBtn, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 41)
/* - Sign Out button is ALWAYS 83 pts above bottom of screen, when visible - */
let bottomConstraint = NSLayoutConstraint(item: signOutBtn, attribute: .bottom, relatedBy: .equal, toItem: scrollView, attribute: .bottom, multiplier: 1, constant: -83)
bottomConstraint.priority = UILayoutPriority.required
/* - Sign Out button is AT LEAST 40 pts below last row of table - */
let topConstraint = NSLayoutConstraint(item: signOutBtn, attribute: .top, relatedBy: .greaterThanOrEqual, toItem: tableView, attribute: .bottom, multiplier: 1, constant: 40)
topConstraint.priority = UILayoutPriority.defaultLow
/* - Sign Out button stretches across the screen - */
let leadingConstraint = NSLayoutConstraint(item: signOutBtn, attribute: .leading, relatedBy: .equal, toItem: scrollView, attribute: .leading, multiplier: 1, constant: 0)
let trailingConstraint = NSLayoutConstraint(item: signOutBtn, attribute: .trailing, relatedBy: .equal, toItem: scrollView, attribute: .trailing, multiplier: 1, constant: 0)
scrollView.addConstraints([heightConstraint, bottomConstraint, leadingConstraint, trailingConstraint, topConstraint])
Скриншоты:
(плохо - это то, чего я достиг сейчас)
(хороший)
Кнопка выхода не появляется, если таблица слишком длинная, пользователь должен прокрутить ее вниз.