Как предотвратить выход содержимого из UIScrollView за границы и перекрытие с другими видами при масштабировании? - PullRequest
0 голосов
/ 07 октября 2019

У меня есть 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, так какон принимает только жесты прокрутки и масштабирования внутри области, которую должен охватывать вид прокрутки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...