Вы устанавливаете scrollView contentSize явным образом как фрейм в этом варианте, вы не должны использовать ограничения автоматического макета с подпредставлениями scrollView. Попробуйте это:
func setupViews() {
view.backgroundColor = .white
view.addSubview(scrollView)
scrollView.addSubview(textView)
textView.frame = CGRect.init(origin: CGPoint(0, 0), size: scrollView.contentSize).insetBy(dx: 16, dy: 16)
}
Другой вариант - не устанавливать scrollView contentSize в явном виде как фрейм, а накладывать ограничения subViews scrollView на края scrollView и задавать высоту и ширину этих subViews с ограничениями, scrollView получит размер содержимого из этих ограничений ширины и высоты. Пример:
view.addSubview(scrollView)
scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
scrollView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 0).isActive = true
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
scrollView.rightAnchor.constraint(equalTo: view.rightAnchor, constant: 0).isActive = true
scrollView.addSubview(imageView)
imageView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 0).isActive = true
imageView.leftAnchor.constraint(equalTo: scrollView.leftAnchor, constant: 0).isActive = true
imageView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0).isActive = true
imageView.rightAnchor.constraint(equalTo: scrollView.rightAnchor, constant: 0).isActive = true
imageView.widthAnchor.constraint(equalToConstant: UIScreen.main.bounds.width).isActive = true
imageView.heightAnchor.constraint(equalToConstant: view.frame.height - 32).isActive = true
не забудьте установить scrollViews и его подпредставления
scrollView.translatesAutoresizingMaskIntoConstraints = false
imageView.translatesAutoresizingMaskIntoConstraints = false