Измените scrollView программно в соответствии с размером contenView [Swift] - PullRequest
1 голос
/ 21 апреля 2020

В моем приложении я пытаюсь создать представление прокрутки с автоматическим изменением размера в зависимости от содержимого, вот упрощенная версия того, что я имею в виду. Я знаю, что должен использовать contentView, но это не работает!

    view.addSubview(mainScrollView)
    mainScrollView.addSubview(contentView)

    mainScrollView.anchorFor(superview: view) // .zero to all edges of view

    let view1 = UIView(frame: view.frame)
    view1.backgroundColor = .red

    let view2 = UIView(frame: view.frame)
    view2.backgroundColor = .brown
    view2.frame.origin.y = view1.frame.height

    mainScrollView.contentSize.height = 2 * view.frame.height

Теперь, если я не укажу contentSize, появится только красный вид. Я также попробовал этот способ:

    let contentView = UIView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height))
    contentView.translatesAutoresizingMaskIntoConstraints = false
    contentView.backgroundColor = .black

    contentView.fillSuperview() // .zero to scrollview edges, but it doesn't work
        .
        .
        .
    contentView.addSubviews(view1,view2)

Как сделать скролл-вид, который изменит свой размер в соответствии с размером contentView, который может измениться, например, нажатием кнопки «развернуть», все программно без раскадровки. Спасибо

1 Ответ

0 голосов
/ 21 апреля 2020

После добавления всех subview, вам необходимо вычислить contentSize с использованием приведенного ниже кода.

let contentRect: CGRect = scrollView.subviews.reduce(into: .zero) { rect, view in
    rect = rect.union(view.frame)
}
scrollView.contentSize = contentRect.size

Примечание:

Если ваши subview динамически добавляются и удаляются, тогда выполните не забыл его назвать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...