У меня есть UIScrollView, содержащий обычный View (я называю это contentView), который снова содержит изображение и некоторый другой контент поверх изображения. UIScrollView не должен занимать весь экран, но должен оставить место над ним для некоторого пользовательского ввода.
Проблема в том, что при масштабировании contentView становится больше, чем UIScrollView, перекрывая соседние объекты, так что contentView теперь занимает весь экран, а не только часть экрана, которая покрыта UIScrollView.
Мой UIScrollView содержится в виде стека с содержимым над ним, и он имеетограничение, чтобы сохранить постоянное соотношение сторон. У contentView есть ограничения на верхний и передний край ScrollView, и он имеет определенный размер, который равен размеру содержащегося в нем изображения.
У меня есть следующие функции, одна из которыхвызывается для ViewDidAppear, а другая представляет собой встроенную необязательную функцию от apple (ViewDidZoom).
func UpdateGraphScrollViewScale() {
let widthscale = GraphScrollView.bounds.size.width / GraphScrollView.contentSize.width
let heightscale = GraphScrollView.bounds.size.height / GraphScrollView.contentSize.height
let minscale = min(widthscale, heightscale)
GraphScrollView.minimumZoomScale = minscale
GraphScrollView.zoomScale = minscale
GraphScrollView.maximumZoomScale = 2.5
}
func scrollViewDidZoom(_ scrollView: UIScrollView) {
GraphScrollView.contentSize = CGSize.init(width: ContentView.bounds.size.width * GraphScrollView.zoomScale, height: ContentView.bounds.size.height * GraphScrollView.zoomScale)
GraphScrollView.isScrollEnabled = true
}
Когда представление уменьшается за пределами границ, становится ясно, что UIScrollView не раскрывается с помощью ContentView, так какон принимает только жесты прокрутки и масштабирования внутри области, которую должен охватывать вид прокрутки.