Использование snapkit/autolayout с UIScrollView

У меня есть приложение, которое будет иметь

  • scrollView
    • contentView
      • chart
      • кнопки
      • другие вещи

Я попытался ограничить его, как показано ниже, но мне не хватает ограничения, и я не могу понять, что мне нужно.

    self.view.addSubview(self.scrollView)
    self.scrollView.snp.makeConstraints { (make) in
        make.edges.equalTo(self.view)
    }
    let contentView = UIView()

    self.scrollView.addSubview(contentView)
    contentView.snp.makeConstraints { (make) in
        make.top.bottom.equalTo(self.scrollView)
        make.left.right.equalTo(self.view)
    }
    contentView.addSubview(self.chart)
    self.chart.snp.makeConstraints { (make) in
        // http://snapkit.io/docs/
        make.edges.equalTo(contentView).inset(UIEdgeInsets(top: 30, left: 0, bottom: 50, right: 0))
    }

где scrollView = UIScrollView()


person Peter S    schedule 17.10.2018    source источник


Ответы (2)


Вам нужно добавить ограничения ширины/высоты или выравнивания для contentView. Попробуй это:

contentView.snp.makeConstraints { (make) in
    make.top.bottom.equalTo(self.scrollView)
    make.left.right.equalTo(self.view)
    make.width.equalTo(self.scrollView)
    make.height.equalTo(self.scrollView)
    // or:
    // make.centerX.equalTo(self.scrollView)
    // make.centerY.equalTo(self.scrollView)
}
person Ilya Kharabet    schedule 17.10.2018
comment
Спасибо. Как я могу установить высоту содержимого scrollView на основе contentView? - person Peter S; 17.10.2018
comment
Высота контента будет рассчитана автоматически - person Ilya Kharabet; 17.10.2018

@Илья Харабет ответил кратко:

contentView.snp.makeConstraints { (make) in
    make.left.right.equalTo(self.view)
    make.width.height.top.bottom.equalTo(self.scrollView)
}

PS:

обычно мы используем make.leading.trailing вместо make.left.right для поддержки RTL.

person dengST30    schedule 17.12.2019