Ios 调整图像高度以适应屏幕(保持纵横比),并以编程方式使其余部分水平滚动

Ios 调整图像高度以适应屏幕(保持纵横比),并以编程方式使其余部分水平滚动,ios,swift,uiimageview,autolayout,scrollview,Ios,Swift,Uiimageview,Autolayout,Scrollview,我想使图像的高度与屏幕的高度相适应,但要保持纵横比,并使其余的图像可以水平滚动。 您可以看到下面的代码示例。我设法使图像的高度与屏幕的高度相匹配,同时保持像这样的纵横比: 我的最后一个问题是scrollView没有在整个水平距离上滚动。只是scrollview用来滚动较小图像大小的距离,所以我也尝试在像这样设置contentView之后重置scrollview,但不幸的是它不起作用。所以我看不到图像的边缘,但是如果我把滚动视图拉到一边,保持我的“手指”在上面,我就能看到图像。但一旦我释放,它就会

我想使图像的高度与屏幕的高度相适应,但要保持纵横比,并使其余的图像可以水平滚动。 您可以看到下面的代码示例。我设法使图像的高度与屏幕的高度相匹配,同时保持像这样的纵横比:

我的最后一个问题是scrollView没有在整个水平距离上滚动。只是scrollview用来滚动较小图像大小的距离,所以我也尝试在像这样设置contentView之后重置scrollview,但不幸的是它不起作用。所以我看不到图像的边缘,但是如果我把滚动视图拉到一边,保持我的“手指”在上面,我就能看到图像。但一旦我释放,它就会反弹回图像的中间部分

我还看了一下: 但我找不到解决问题的办法

我也尝试过手动计算图像在适应屏幕后的比率变化,然后设置scrollview的contentSize,但这也不起作用(就像这个问题的答案:这里:)

代码如下:

import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {
     var scrollView: UIScrollView = {
            let scrollView = UIScrollView()
            scrollView.translatesAutoresizingMaskIntoConstraints = false
            scrollView.backgroundColor = .red
            return scrollView
        }()

        var contentView: UIView = {
            let contentView = UIView()
            contentView.translatesAutoresizingMaskIntoConstraints = false
            return contentView
        }()

        var imageView: UIImageView = {
            let imageView = UIImageView()
            let image = UIImage(named: "Erlebnispark.jpg")
            imageView.image = image
            imageView.backgroundColor = .red
            imageView.translatesAutoresizingMaskIntoConstraints = false
            imageView.contentMode = .scaleAspectFill
            return imageView
        }()

        override func viewDidLoad() {
            super.viewDidLoad()
            self.view.addSubview(scrollView)
            scrollView.addSubview(contentView)
            contentView.addSubview(imageView)
            scrollView.delegate = self
            setupLayout()
        }

        func setupLayout() {
            [
                scrollView.topAnchor.constraint(equalTo: self.view.topAnchor),
                scrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
                scrollView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
                scrollView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),

                contentView.topAnchor.constraint(equalTo: scrollView.topAnchor),
                contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
                contentView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
                contentView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
                //contentView.widthAnchor.constraint(equalTo: scrollView.contentLayoutGuide.widthAnchor),

                contentView.heightAnchor.constraint(equalTo: scrollView.frameLayoutGuide.heightAnchor),
               // contentView.widthAnchor.constraint(equalTo: scrollView.contentLayoutGuide.widthAnchor),

                imageView.topAnchor.constraint(equalTo: contentView.topAnchor),
                imageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
                imageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
                imageView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
               // imageView.heightAnchor.constraint(equalTo: contentView.heightAnchor),

                ].forEach {$0.isActive = true}
        }
}

也许有人能帮我

只是一些变化

var imageView: UIImageView = {
    let imageView = UIImageView()
    let image = UIImage(named: "Erlebnispark.jpg")
    imageView.image = image
    imageView.backgroundColor = .red
    imageView.translatesAutoresizingMaskIntoConstraints = false

    // use scaleToFill
    //imageView.contentMode = .scaleAspectFill
    imageView.contentMode = .scaleToFill

    return imageView
}()
setupLayout()
中的第一行:

约束数组中的最后一行:

        // add this line
        imageView.widthAnchor.constraint(equalTo: imageView.heightAnchor, multiplier: img.size.width / img.size.height),

        ].forEach {$0.isActive = true}
您完成的约束现在告诉图像视图的宽度为其自身的高度,乘数为
img.size.width/img.size.height


其他一切都很好。

只是一些变化

var imageView: UIImageView = {
    let imageView = UIImageView()
    let image = UIImage(named: "Erlebnispark.jpg")
    imageView.image = image
    imageView.backgroundColor = .red
    imageView.translatesAutoresizingMaskIntoConstraints = false

    // use scaleToFill
    //imageView.contentMode = .scaleAspectFill
    imageView.contentMode = .scaleToFill

    return imageView
}()
setupLayout()
中的第一行:

约束数组中的最后一行:

        // add this line
        imageView.widthAnchor.constraint(equalTo: imageView.heightAnchor, multiplier: img.size.width / img.size.height),

        ].forEach {$0.isActive = true}
您完成的约束现在告诉图像视图的宽度为其自身的高度,乘数为
img.size.width/img.size.height


其他的都可以走了。

非常感谢!很好用!非常感谢你!很好用!