Мой ответ на ваш вопрос - CenterY с ограничениями сверху и снизу? - поставляется с небольшим комментарием ...
Я знаю, что SnapKit популярен, и я уверен, что иногда он может быть очень полезным, особенно если вы используете его постоянно.
Однако ... при использовании вы никогда не сможете быть абсолютно уверенным в том, что он делает. И, по моему опыту, люди, которые используют SnapKit, часто не понимают, что такое ограничения или как они работают (не имея в виду, что это имеет место с you ... просто наблюдение из разных вопросов).
В этом конкретном случае c либо SnapKit имеет небольшую ошибку, либо эта конкретная строка не совсем подходит для желаемого результата:
$0.top.bottom.greaterThanOrEqualToSuperview().inset(80.0)
Вы можете подтвердить это с помощью простой тест:
class TestViewController: UIViewController {
let testView: UIView = {
let v = UIView()
v.backgroundColor = .red
return v
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(testView)
testView.snp.makeConstraints {
$0.centerY.equalToSuperview()
// height exactly 200 points
$0.height.equalTo(200.0)
// top and bottom at least 80 points from superview
$0.top.bottom.greaterThanOrEqualToSuperview().inset(80.0)
$0.leading.trailing.equalToSuperview().inset(16.0)
}
}
}
Это результат ... вместе с [LayoutConstraints] Unable to simultaneously satisfy constraints.
сообщением в консоли отладки:
Если мы заменим эту строку следующим образом:
// replace this line
//$0.top.bottom.greaterThanOrEqualToSuperview().inset(80.0)
// with these two lines
$0.top.greaterThanOrEqualToSuperview().offset(80.0)
$0.bottom.lessThanOrEqualToSuperview().offset(-80.0)
, что, безусловно, , похоже, делает то же самое, мы получим то, что ожидали:
Итак, что-то в SnapKit подозрительно.
Это решит вашу проблему. Измените настройку view_Container
ограничения следующим образом:
self.view_Container.snp.makeConstraints {
$0.centerY.equalToSuperview().priority(.required)
// replace this line
//$0.top.bottom.greaterThanOrEqualToSuperview().inset(80.0)
// with these two lines
$0.top.greaterThanOrEqualToSuperview().offset(80.0)
$0.bottom.lessThanOrEqualToSuperview().offset(-80.0)
$0.leading.trailing.equalToSuperview().inset(16.0)
}
До изменения:
После изменения:
Что касается добавления прокрутки, когда у вас много опциональных кнопок, я могу привести пример прокрутки всего содержимого или прокрутки только Опциональные кнопки.