带有标签的ImageView,具有适合不同尺寸图像的动态位置

时间:2015-11-19 20:30:14

标签: ios swift uiimageview autolayout aspect-ratio

我正在尝试在iOS 9 Swift应用程序中创建一个简单的图库图像详细信息视图。

我希望图像位于顶部,标签位于下方(图像标题)。但是,所有图像都是不同的形状和大小。

我使用Aspect Fit作为图像视图,这会为横向图像带来问题。

图像视图不会调整大小以调整图像,因此最终会在其上方和下方留下空白,这会在我的图像和标题之间产生很大的差距。

在下面的示例中,黄色是图像视图,蓝色是图像本身,其中纵横适合调整大小,粉红色是标题标签。

Constraints

使图像视图适应图像的任何解决方案,但相应地剪切图像视图以删除未使用的空间?我试着在故事板中勾选“剪辑子视图”但无济于事。

{{3}}

2 个答案:

答案 0 :(得分:0)

你能展示你的约束配置吗?我想如果你让高度自由,它将适合你放在它上面的图像。

答案 1 :(得分:0)

我认为关键是在imageview上设置宽高比约束。

class GalleryViewController: UIViewController {

  var image: UIImage!

  @IBOutlet weak var imageView: UIImageView!
  @IBOutlet weak var captionLabel: UILabel!

  override func viewDidLoad() {
    super.viewDidLoad()

    let aspectRatio = image.size.width / image.size.height
    imageView.addConstraint(NSLayoutConstraint(item: imageView, attribute: .Width, relatedBy: .Equal, toItem: imageView, attribute: .Height, multiplier: aspectRatio, constant: 0.0))

    imageView.image = image
    captionLabel.text = (aspectRatio < 1.0) ? "Portrait" : "Landscape"
  }

  @IBAction func viewWasTapped(sender: UITapGestureRecognizer) {
    presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
  }

}

看看我的示例项目: https://www.dropbox.com/sh/oa8g96sknqqq97p/AADvEFpK2L9FbT-gBt5W49pQa?dl=0