Как сделать UIImage Scrollable внутри UIScrollView? - PullRequest
0 голосов
/ 06 июля 2019

У меня в настоящее время есть ScrollView, а внутри ScrollView у меня есть UIImageView.

Я получаю изображения разных размеров с моего сервера, и большинство изображений больше, чем bounds моего экрана.

Я бы хотел прокрутить изображение, если оно больше моего экрана.

Примерно так ...

enter link description here

Это то, что я пробовал до сих пор.

let image = UIImage(named: "myImg")
let heightInPoints = image?.size.height
let heightInPixels = heightInPoints ?? 0 * image!.scale
let widthInPoints = image?.size.width
let widthInPixels = widthInPoints ?? 0 * image!.scale

self.imageView.frame = CGRect(x: 0, y: 0, width: widthInPixels, height: heightInPixels) //= image
self.imageView.image = image

scrollView.contentSize = CGSize(width: imageView.frame.width, height: imageView.frame.height)

Но, похоже, это не работает.Либо он прокручивается только вертикально или горизонтально, либо никогда не прокручивается.

Что я делаю не так.Или есть лучший способ получить этот эффект?

1 Ответ

1 голос
/ 06 июля 2019

Решение 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") 

У меня оба подхода работают на детской площадке. Так что, если они все еще не будут работать для вас, пожалуйста, поделитесь дополнительной информацией о том, как вы устанавливаете иерархию, и дополнительными параметрами представления прокрутки.

...