繁体   English   中英

带有Aspect的UIImageView使用AutoLayout填充自定义UITableViewCell

[英]UIImageView with Aspect Fill inside custom UITableViewCell using AutoLayout

我一直在努力安装UIImageView ,它使用Aspect Fill显示可变宽度和高度的图像。 单元格高度不适应UIImageView的新高度并保持其高度。

视图的层次结构就是这样

  • 的UITableViewCell
    • UITableViewCell.ContentView
      • 的UIImageView

我在XCode自动布局中尝试了这些场景:

  • 设置UIImageView => Heightremove at build time
  • UIImageViewIntrinsic Value设置为placeholder
  • 将每个UIImageViewContentViewUITableViewCellIntrinsic Value设置为placeholder

有了这些组合中的任何一个,我得到了这个观

http://i.stack.imgur.com/Cw7hS.png

蓝线代表单元格边框(边界),绿色代表UIImageView边框(边界)。 在这个例子中有四个单元格,第一个和第三个单元格没有图像,第二个和第四个单元格具有相同的图像(溢出没有图像的图像)。

我根据之前的两个答案拼凑了一个解决方案:

我想保持图像的AspectRatio而不管它的Height同时根据UIImageView (图像的容器)修正Width

该解决方案包括:

  1. 添加新的AspectRatio约束

     let image = UIImage(ContentFromFile: "path/to/image") let aspect = image.size.width / image.size.height aspectConstraint = NSLayoutConstraint(item: cardMedia, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: cardMedia, attribute: NSLayoutAttribute.Height, multiplier: aspect, constant: 0.0) 

    当添加这个约束时,xCode会抱怨新的“冗余”约束并试图打破它,使它变得无用,但显示的图像与我想要的完全一样。 这引出了我的第二个解决方案

    1. 将新约束的优先级降低到'999'似乎会阻止xcode打破它,并且它停止显示有关新约束的警告消息

      aspectConstraint?.priority = 999

不确定为什么xCode会在构建/运行时自动添加UIView-Encapsulated-Layout-HeightUIView-Encapsulated-Layout-Height ; 但是,我学会了如何尊重它并与之共存:)

只需将解决方案留在这里供任何人查看。 这适用于iOS 8.我尝试使用iOS7但它不能像你需要实现tableView:heightForRowAtIndexPath一样工作tableView:heightForRowAtIndexPath根据其中包含的所有项目计算单元格的高度并禁用设置:

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44.0

假设您有一个widthheight分别为768 x 592的UIImage ,高度始终保持等于,例如在上面的尺寸(iPad)中旋转的设备,图像的width变为1024, height保持相等。

你可以做些什么来维护图像的方面是按照你想要的尺寸缩放它,例如,如果你知道图像总是具有相同的尺寸,我们说例如1280x740,你可以将UIImage设置为.ScaleToFill和按以下方式计算:

(widthOfTheImage / heightOfTheImage) * heightWhereYouWanToSet = widthYouHaveToSet

例如 :

(1280 / 740) * 592 = 1024

这是我必须在UIImage设置的width以便在图像宽度变化时保持图像的比例。

我希望你能理解我试图对你说的地方。

添加方面约束时,Xcode会抱怨新的“冗余”约束并试图破坏它。 只需检查方面约束的“在构建时删除”。

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM