Swift以编程方式创建uiimageview屏幕全宽保持高度比
我使用以下代码以编程方式创建uiimageviewSwift以编程方式创建uiimageview屏幕全宽保持高度比,swift,uiimageview,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是屏幕的全宽,高度可以调整到当前的图像高度。我正在将不同大小的图像加载
var imageView : UIImageView
imageView = UIImageView(frame:CGRectMake(10, 50, 100, 300));
imageView.image = UIImage(named:"image.jpg")
self.view.addSubview(imageView)
我遇到的问题是我希望uiimageview是屏幕的全宽,高度可以调整到当前的图像高度。我正在将不同大小的图像加载到此uiimageview中
如何做到这一点?您必须将contentMode设置为.scaleSpectFit
let imageView = UIImageView(frame: self.view.frame)
imageView.image = UIImage(named:"image.jpg")
imageView.contentMode = .scaleAspectFit
self.view.addSubview(imageView)
没有内置的方法可以让
UIImageView
根据图像调整自身大小。更新图像时,必须通过更改帧的高度或设置新的纵横比约束来调整imageView的高度
UIImageView
上有一个contentMode
设置(.scaleSpectFit
),可以在imageView中保持图像的纵横比,但不会调整imageView本身的大小,但只需将图像放在其中,根据需要在图像上方和下方或侧面添加填充,以保持纵横比
更新帧:
以下是ui图像视图
的扩展,当设置图像
时,该扩展可更改帧
的高度:
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
的此子类为您的UIImageView
维护aspectRatio
约束。您需要添加约束来放置图像并设置其宽度
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
设置约束以放置imageView并确定其宽度(例如:将前导约束和尾随约束设置为其superview)
给它一个高度约束,然后在尺寸检查器中将该约束的优先级更改为Low(250)
,以便apectRatio约束可以控制imageView的高度
将@IBOutlet
添加到您的imageView:@IBOutlet var imageView:ResizingImageView代码>
当需要添加图像时:imageView.setImageAndUpdateAspectRatio(图像:newImage)
你可以用几种方法来解决这个问题。我想填充图像的两侧,使其位于中间
view.addSubview(imageView)
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
这不会更改图像视图的高度。这会改变图像在图像视图中的显示方式。这有帮助吗?你有什么问题吗?