Решение 1. Обновление фреймов
Во-первых, убедитесь, что иерархия представлений настроена правильно (imageView
добавлено к scrollView
):
scrollView.addSubview(imageView)
Тогда я бы предложил переписать этот код примерно так:
let image = UIImage(named: "myImg")
imageView.image = image // setup image to imageView
imageView.frame.size = image?.size ?? .zero // setup image size or zero to imageView
scrollView.contentSize = image.size ?? .zero // setup image size or zero as a content size
Решение 2. Использование ограничений
Существует также другое решение, использующее ограничения вместо ручной настройки размеров. Это займет немного больше кода, но не требует пересчета размеров при изменении изображения.
scrollView.addSubview(imageView) // Setup the views hierarchy
imageView.translatesAutoresizingMaskIntoConstraints = false // Make sure constraints won't interfere with autoresizing mask
NSLayoutConstraint.activate(
[
imageView.leftAnchor.constraint(equalTo: scrollView.leftAnchor), // attaching to the left
imageView.topAnchor.constraint(equalTo: scrollView.topAnchor), // attaching to the top
imageView.rightAnchor.constraint(equalTo: scrollView.rightAnchor), // attaching to the right
imageView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor) // attaching to the bottom
]
)
Затем мы заменяем существующее изображение новым, например:
imageView.image = UIImage(named: "myImg")
У меня оба подхода работают на детской площадке. Так что, если они все еще не будут работать для вас, пожалуйста, поделитесь дополнительной информацией о том, как вы устанавливаете иерархию, и дополнительными параметрами представления прокрутки.