Изображение в UIImageView обрезается, когда ширина - это ширина устройства, а высота - высота исходного изображения. - PullRequest
0 голосов
/ 03 апреля 2019

Я создал ImageViewController, который используется для просмотра длинных изображений.(например, приложение для комиксов)

, но поскольку UIImageView имеет ширину устройства-ширины, высота - оригинальный размер (соотношение сторон)

Но изображение обрезается.Как мне это сделать?

Код пользовательского интерфейса

    fileprivate let scrollView = UIScrollView().then {
        $0.translatesAutoresizingMaskIntoConstraints = false
        $0.backgroundColor = .yellow
        $0.bounces = false
    }

    fileprivate let stackView = UIStackView().then {
        $0.translatesAutoresizingMaskIntoConstraints = false
        $0.axis = .vertical
    }

    // MARK: - View Life Cycle
    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.addSubview(self.scrollView)
        self.scrollView.addSubview(self.stackView)

        self.scrollView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
        self.stackView.snp.makeConstraints { make in
            make.edges.equalTo(self.scrollView)
        }

    }

Добавить код UIImageView


for element in lists {
    let imgView = UIImageView()
    imgView.setImage(element) // set image from url

    imgView.contentMode = .scaleAspectFill

    imgView.clipsToBounds = true
    imgView.translatesAutoresizingMaskIntoConstraints = false
    self.stackView.addArrangedSubview(imgView)
    imgView.widthAnchor.constraint(equalTo:    self.scrollView.widthAnchor, multiplier: 1.0).isActive = true
    imgView.heightAnchor.constraint(equalTo:     self.scrollView.heightAnchor, multiplier: 1.0).isActive = true
}

Как изменить соотношение сторон (максимальная ширина) UIImageView?


Я нашел решение!

добавлен код ниже,

func imageScaled(with sourceImage: UIImage?, scaledToWidth i_width: Float) -> UIImage? {
        let oldWidth = Float(sourceImage?.size.width ?? 0.0)
        let scaleFactor: Float = i_width / oldWidth

        let newHeight = Float((sourceImage?.size.height ?? 0.0) * CGFloat(scaleFactor))
        let newWidth: Float = oldWidth * scaleFactor
        print(newHeight)

        UIGraphicsBeginImageContext(CGSize(width: CGFloat(newWidth), height: CGFloat(newHeight)))
        sourceImage?.draw(in: CGRect(x: 0, y: 0, width: CGFloat(newWidth), height: CGFloat(newHeight)))
        let newImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage
    }

, затем установите UIImageView.

imgView.setImageScaled(element, width: Float(self.scrollView.frame.width))

1 Ответ

0 голосов
/ 03 апреля 2019

, так как ваше изображение больше высоты, чем высота экрана iphone, вы должны поместить изображение в scrollView и установить режим содержимого на .scaleAspectFit и установить высоту imageView равной высоте изображения

imgView.contentMode = .scaleAspectFit
...