UILayoutPriority в UIScrollView ни на что не влияет - PullRequest
0 голосов
/ 07 марта 2019

У меня есть представление содержимого (определено в файле xib), в котором есть несколько меток и две кнопки (белый вид на скриншоте 1.a).Если мы пришли так, как показано на экране, позвольте мне нарисовать схему:

ViewController View -> View (Custom View Class) -> UIScrollView -> ContentView (Xib file)

Кнопки расположены относительно нижнего поля.Они оба помещены на дно.Верхняя кнопка имеет ограничение, которое имеет 10 констант, связанных с нижней частью последней метки (это greater than equal constraint и имеет UILayoutPriority из 5).

Проблема : Когда я даю ограничение от кнопки к метке, даже если оно больше, чем равно, кнопка складывается на 10 пунктов ниже для метки.Даже в дне столько разрыва.(Снимок экрана 2.a)

Чего я хочу достичь: Я хочу этого Если все содержимое помещается на экране с минимальным ограничением 10 от последней метки до первой кнопки, не прокручивайте,Если нет, выполните прокрутку.

Класс пользовательского представления:

override init(frame: CGRect) {
    super.init(frame: frame)
    initialize()
}
func initialize() {
    self.translatesAutoresizingMaskIntoConstraints = false
    let name = String(describing: type(of: self))
    let nib = UINib(nibName: name, bundle: .main)
    nib.instantiate(withOwner: self, options: nil)

    cancelButton.layer.borderColor = UIColor.darkGray.cgColor
    cancelButton.layer.borderWidth = 1.0

    scrollView.translatesAutoresizingMaskIntoConstraints = false
    self.addSubview(self.scrollView)
    scrollView.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
    scrollView.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
    scrollView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
    scrollView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
    scrollView.addSubview(contentView)

    self.contentView.translatesAutoresizingMaskIntoConstraints = false
    //self.contentView.clipsToBounds = true

    contentView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
    contentView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
    contentView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
    contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
    contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true 
}

Пример снимков экрана:

Если содержимое помещается в поле зрения, я хочу, как показано на изображении ниже,Если нет, кнопка может подниматься до тех пор, пока она не уместится, если она не уместится, хотя, вид должен быть прокручиваемым.

screenshot 1.a

Снимок экрана 2.a

1 Ответ

2 голосов
/ 07 марта 2019

Следующей строки должно быть достаточно, чтобы вычислить высоту содержимого в представлении прокрутки и дать вам ожидаемое поведение.

contentView.heightAnchor.constraint(greaterThanOrEqualTo: scrollView.heightAnchor).isActive = true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...