UIImageView 对齐
Posted
技术标签:
【中文标题】UIImageView 对齐【英文标题】:UIImageView Alignment 【发布时间】:2016-09-05 20:28:58 【问题描述】:我在 tableviewcell 中有一个 UIImageView,并将内容模式设置为 scaleAspectFill:
let imageSize = CGSize(width: 70, height: 70)
MenuImage.contentMode = .scaleAspectFill
if(self.reuseIdentifier == "cell1")
MenuImage.image = UIImage.imageWithIonicon(.Map, color: UIColor.white, iconSize: 70, imageSize: imageSize)
else if (self.reuseIdentifier == "cell2")
MenuImage.image = UIImage.imageWithIonicon(.iosPerson, color: UIColor.white, iconSize: 70, imageSize: imageSize)
else if (self.reuseIdentifier == "cell3")
MenuImage.image = UIImage.imageWithIonicon(.iOSHelp, color: UIColor.white, iconSize: 70, imageSize: imageSize)
虽然这使图像非常适合单元格,但图像似乎与底部对齐。有没有办法让它在 UIImageView 中垂直居中(棕色背景只是为了检查图像视图的大小)
【问题讨论】:
.scaleAspectFit
有什么问题?
两者似乎产生了相似的结果(与底部对齐)
【参考方案1】:
根据This,为了修复垂直对齐,您需要在“ionicons.swift”文件中更改此行:
attString.drawInRect(CGRect(x: (imageSize.width / 2) - boundingRect.size.width / 2, y: (imageSize.height / 2) - boundingRect.size.height / 2, width: imageSize.width, height: imageSize.height))
到
attString.drawInRect(CGRect(x: (imageSize.width / 2) - (boundingRect.size.width / 2), y: (imageSize.height / 2) - (iconSize / 2), width: imageSize.width, height: imageSize.height))
*Swift 3.0 版本,替换为:
attString.draw(in: CGRect(x: (imageSize.width / 2) - boundingRect.size.width / 2, y: (imageSize.height / 2) - boundingRect.size.height / 2, width: imageSize.width, height: imageSize.height))
与
attString.draw(in: CGRect(x: (imageSize.width / 2) - (boundingRect.size.width / 2), y: (imageSize.height / 2) - (iconSize / 2), width: imageSize.width, height: imageSize.height))
【讨论】:
工作得很好,谢谢。甚至没有想过这是 IocIcons 的问题【参考方案2】:这是一个关于约束和锚点的例子:
self.addSubview(containerView)
containerView.addSubview(yourImageView)
containerView.bottomAnchor.constraintEqualToAnchor(self.bottomAnchor).active=true
containerView.leftAnchor.constraintEqualToAnchor(self.leftAnchor).active=true
yourImageView.topAnchor.constraintEqualToAnchor(containerView.topAnchor).active=true
yourImageView.leftAnchor.constraintEqualToAnchor(containerView.leftAnchor).active=true
yourImageView.widthAnchor.constraintEqualToConstant(70).active=true
yourImageView.heightAnchor.constraintEqualToConstant(70).active=true
【讨论】:
谢谢,我一开始就是这么想的(这就是为什么我用 MenuImage.backgroundColor = UIColor.brown 将 UIImageView 更改为棕色背景的原因)。 UIImageView 本身似乎是正确的大小并且在正确的位置,当以编程方式添加图像时,实际图像与 UIImageView 的底部对齐。我已经尝试了您的建议(对 Swift 3.0 进行了一些更改),但实际图像仍未在视图中居中。以上是关于UIImageView 对齐的主要内容,如果未能解决你的问题,请参考以下文章
将contentMode设置为UIViewContentModeScaleAspectFit时如何设置UIImageView左对齐或右对齐?
UIScrollView 中 UIImageView 的对齐方式
iOS:使用 UIViewContentModeScaleAspectFill 时如何对齐(左/右) UIImageView?