Swift以编程方式创建uiimageview屏幕全宽并保持高度比例

时间:2019-06-15 12:55:59

标签: swift uiimageview

我正在使用以下代码以编程方式创建uiimageview。

var imageView : UIImageView
imageView  = UIImageView(frame:CGRectMake(10, 50, 100, 300));
imageView.image = UIImage(named:"image.jpg")
self.view.addSubview(imageView)

我遇到的问题是我希望uiimageview是屏幕的整个宽度,并且高度要调整为当前图像的高度。我正在此uiimageview中加载不同的图像大小。

这怎么办?

3 个答案:

答案 0 :(得分:0)

您必须将contentMode设置为.scaleAspectFit。

let imageView = UIImageView(frame: self.view.frame) 
imageView.image = UIImage(named:"image.jpg") 
imageView.contentMode = .scaleAspectFit 
self.view.addSubview(imageView)

答案 1 :(得分:0)

没有内置的方法来根据UIImageView调整image的大小。更新图像时,您必须通过更改框架的高度或设置新的宽高比约束来调整imageView的高度。

contentMode上有一个.scaleAspectFit设置(UIImageView)可以保持imageView内图像的长宽比,但不会调整imageView本身的大小,而只是使图像适合其中的位置,并在必要时在图像的上方和下方或侧面添加填充以保持纵横比。

更新框架:

这是UIImageView的扩展名,当设置frame时,它会更改image的高度:

extension UIImageView {
    func setImageAndUpdateFrameHeight(image: UIImage) {
        self.image = image

        if image.size.width > 0 {
            self.frame.size.height = self.frame.size.width / image.size.width * image.size.height
        }
    }
}

使用自动版式

时更新纵横比

如果您使用的是自动版式,那么您想在更新图像时设置新的AspectRatio约束。使用UIImageView的子类为您的aspectRatio维护UIImageView约束。您需要添加约束来放置图像并设置其宽度。

class ResizingImageView: UIImageView {
    var aspectRatio: NSLayoutConstraint?

    func setImageAndUpdateAspectRatio(image: UIImage) {
        self.image = image

        aspectRatio?.isActive = false
        if image.size.width > 0 {
            aspectRatio = self.heightAnchor.constraint(equalTo: self.widthAnchor, multiplier: image.size.height / image.size.width)
        }
        aspectRatio?.isActive = true
    }
}

注释:

  1. 如果在情节提要中进行设置,请拖出UIImageView,然后在 Identity Inspector 中将其类别更改为ResizingImageView
  2. 设置约束以放置imageView并确定其宽度(例如:将前约束和尾约束设置为其superview)。
  3. 给它一个高度约束,然后在 Size Inspector 中将该约束的优先级更改为Low (250),以便apectRatio约束可以控制imageView的高度。
  4. 在您的imageView中添加@IBOutlet@IBOutlet var imageView: ResizingImageView!
  5. 该添加图像了:imageView.setImageAndUpdateAspectRatio(image: newImage)

答案 2 :(得分:0)

您可以通过几种方法进行此操作。我想在图像的两边进行填充并使其居中。

    view.addSubview(programImageView)
    imageView.translatesAutoresizingMaskIntoConstraints = false
    imageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    imageView.widthAnchor.constraint(equalToConstant: view.frame.width - 80).isActive = true
    imageView.heightAnchor.constraint(equalToConstant: view.frame.width - 80).isActive = true