22

我想在使用UIViewContentModeScaleAspectFitin时控制图像对齐UIImageView

在此处输入图像描述

比如我上面有两个UIImageView合一视图。这两个UIImageView的 contentMode 是UIViewContentModeScaleAspectFit. 现在我想将图像 3 设置为右对齐,图像 4 设置为左​​对齐,这样这两个图像就可以在一起了。

我尝试将 contentMode 设置为UIViewContentModeScaleAspect|UIViewContentModeLeft,但这会使事情变得更糟。

任何建议表示赞赏。

4

3 回答 3

35

最后,我找到了可以解决的UIImageViewAligned项目。

感谢@Marchy,还有 swift 版本的UIImageViewAlignedSwift

于 2013-09-06T02:17:51.233 回答
7

与其尝试在图像视图中左对齐图像,不如以编程方式向图像视图添加宽度约束,以便没有“多余空间”。

假设您有一个UIImageView带有“Aspect Fit”的内容模式,并且在界面构建器中添加了一个固定的高度约束。然后,在相关的视图控制器中,检查图像的纵横比并应用必要的宽度约束以将图像视图捕捉到包含的图像。例如:

@IBOutlet weak var imageView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()

    // UIImage loaded from somewhere...
    imageView.image = uiImage

    // Check the UIImageView for existing height constraints
    let heightConstraints = imageView.constraints.filter{$0.firstAttribute == .height}
    if let imageViewHeight = heightConstraints.first?.constant {

        // Calculate the width which would make the image view fit
        // the image perfectly, and constrain the view to that width.
        let desiredImageViewWidth = (imageViewHeight / uiImage.size.height) * uiImage.size.width
        imageView.addConstraint(NSLayoutConstraint(item: imageView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: desiredImageViewWidth))
    }
}

要将其应用于您的问题,您可以将两个UIImageViews 约束为彼此相邻,为两者设置一个固定的高度约束(具有相同的值),然后使用上述代码以编程方式设置宽度。

于 2016-11-06T16:30:39.617 回答
2

某些人的另一个选择可能是调整UIImageView. UIImageView在 Interface Builder 中添加一个低优先级的约束。

在此处输入图像描述

这将满足约束,直到添加图像。然后将 UIImageView 的Content Hugging Priority设置为较高的宽度值(或高度,如果您是顶部/底部对齐)。

在此处输入图像描述

然后只需将 UIImageView 的内容模式设置为您想要的。希望这可以帮助!

于 2018-03-15T22:22:11.903 回答