我正在使用以下代码以编程方式创建uiimageview。
var imageView : UIImageView
imageView = UIImageView(frame:CGRectMake(10, 50, 100, 300));
imageView.image = UIImage(named:"image.jpg")
self.view.addSubview(imageView)
我遇到的问题是我希望uiimageview是屏幕的整个宽度,并且高度要调整为当前图像的高度。我正在此uiimageview中加载不同的图像大小。
这怎么办?
答案 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
}
}
注释:
UIImageView
,然后在 Identity Inspector 中将其类别更改为ResizingImageView
。Low (250)
,以便apectRatio约束可以控制imageView的高度。@IBOutlet
:@IBOutlet var imageView: ResizingImageView!
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