разместить на экране ScrollView а в него запихнуть объекты, например пусть это будет UIView у которого высота 4000, если я буду размещать UIView на ScrollView с помощью констрейнт SnapKit, то на экране отображеться scrollView и uiview, но scrollView не крутиться, а если я размещаю uiview вот таким образом:
vieww.frame = CGRect(x: 50, y: 200, width: 100, height: 4000)
то все отображеться и scrollView крутиться, у меня вопрос почему так получаеться и как мне размещать объекты на scrollView с помощью SnapKit???
p.s вот полный код:
import UIKit
import SnapKit
class MainScreenView: UIViewController {
private let myScrollView = UIScrollView()
private let vieww = UIView()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
setupUI()
}
private func setupUI() {
view.addSubview(myScrollView)
myScrollView.addSubview(vieww)
myScrollView.snp.makeConstraints { make in
make.top.equalToSuperview()
make.leading.equalToSuperview()
make.trailing.equalToSuperview()
make.bottom.equalToSuperview()
}
vieww.snp.makeConstraints { make in
make.top.equalToSuperview().inset(50)
make.centerX.equalToSuperview()
make.height.equalTo(4000)
make.width.equalTo(100)
}
//vieww.frame = CGRect(x: 50, y: 200, width: 100, height: 4000)
vieww.backgroundColor = .accent
myScrollView.contentSize = vieww.bounds.size
myScrollView.showsVerticalScrollIndicator = true
myScrollView.backgroundColor = .gray
}
}
Нижний констрейнт надо задать
так получается, потому что система не может вычислить размер контента скроллвью. причем ни по вертикали ни по горизонтали. чтобы вычислить размеры нужно либо задать contentSize (что ты и делаешь, когда руками прописываешь фрейм дочерней вью, а затем эти размеры устанавливаешь на скролл), либо задать констрейнты, которые будут этот размер позволять высчитывать, например, привязать дочернюю вью к contentLayoutGuide скрола со всех сторон, а саму дочернюю вью с фиксированными размерам (например задать констрейнты ширины и высоты, либо возвращать что-нибудь желаемое в свойстве intrinsicSize)
Обсуждают сегодня