Определите правильно высоту для UIScrollView

Я создаю приложение, используя Swift3, и мне трудно правильно определить высоту для UIScrollView, я использую autolayout и создаю эту структуру:

  • UIScrollView
    • UIView // The container view
    • UIImageView // Constraint Верхние края = 20 по отношению к UIView
    • UITextView // Constraint Верхние края = 40 по отношению к UIImageView
    • UITextView // Constraint Верхние края = 20 по отношению к UITextView
    • UIButton // Constraint Верхние грани 30 по отношению к UITextView

В настоящее время я использую эту логику для вычисления высоты UIScrollView.

override func viewDidLayoutSubviews() {
    var scrollHeight : CGFloat = 0.0

    for view in self.containerView.subviews {
        view.layoutIfNeeded()
        scrollHeight += view.frame.size.height
    }

    // Adding height for scrollview, according to the sum of all child views
    self.scrollView.contentSize.height = scrollHeight

}

Но я могу получить только высоту views, и они не учитывают «поля» Constraints, я хотел бы знать, как рассчитать правильную высоту для UIScrollView, скорректированную в соответствии с их содержанием.


person mauricio caserta    schedule 07.07.2017    source источник
comment
Если вы добавите ограничение на последнюю кнопку в нижней части прокрутки, вам придется вручную установить размер содержимого.   -  person agibson007    schedule 07.07.2017
comment
@ agibson007 agibson007, но я не добавляю это ограничение, а только добавляю ограничение в нижнюю часть пользовательского интерфейса выше   -  person mauricio caserta    schedule 07.07.2017
comment
Да, это я и имел в виду, извините. Это должно сработать. Смотрите этот ответ, который я дал некоторое время назад. stackoverflow.com/questions/42684594/   -  person agibson007    schedule 07.07.2017


Ответы (2)


Закрывать! Давайте добавим верхнее поле для каждого представления:

override func viewDidLayoutSubviews() {
    var scrollHeight : CGFloat = 0.0

    for view in self.containerView.subviews {
        view.layoutIfNeeded()
        scrollHeight += view.frame.size.height

        //Add the margins as well to the scrollHeight
        scrollHeight += view.layoutMargins.top
    }

    // Adding height for scrollview, according to the sum of all child views
    self.scrollView.contentSize = CGRect(x: self.scrollView.contentSize.width, y: scrollHeight)
}
person impression7vx    schedule 07.07.2017

self.scrollview.contentsize.height = containerview.height;

person Ravi Vaishnav    schedule 07.07.2017