我在故事板中有一个UIImageView,我从两个来源之一存储UIImages - 我要么从网络加载图像,要么从本地资产目录加载图像。在所有情况下,通过检查,图像是48x48;图像视图恰好是50x50。除了获取图像的代码(通过Alamofire + AlamofireImage或UIImage:named),其余代码是相同的。通过在lldb中检查,加载的图像对于两个源都是48x48。
我看到的行为是从网络加载的图像在图像视图中居中显示。然而,从资产目录中加载的那些被转移到右边,并且无论我在图像视图上设置的内容模式如何都被移动(我全部尝试过)。整个局部图像被移位,使得左边缘不与图像视图的左边缘对齐 - 它大致位于中心。作为实验,我捕获了一个网络图像并将其存储在目录中;它在显示时也被移动了,这使我得出结论问题不在于图像本身。
我的问题是:在这两种情况下可能有什么不同 - 我从网上加载的48x48图像与从资产目录加载的相同图像之间 - 导致本地加载的图像向右移动? / em>
这是从资产目录中加载的代码:
image = UIImage(named: iconString)
我也试过这个:
image = UIImage(named: iconString)?.imageWithAlignmentRectInsets(UIEdgeInsetsMake(0, 0, 0, 9))
但没有区别。
Alamofire / AlamofireImage代码同样简单:
let request = Alamofire.request(.GET, url)
.validate()
.responseImage { response in completion?(result: response.result.value) }
最后,将图像放入UI的代码(两个路径共有)是:
cell.imageView?.image = fcsts.first!.icon
我捕获文件并从资产目录中尝试它的实验让我觉得文件内容不是问题(虽然我愿意显示错误!) - 某些事情导致了本地化要在视图中偏移的加载图像。
该应用程序适用于iPhone。我正在测试最新的Xcode / iOS;该应用程序位于Swift。
答案 0 :(得分:0)
问题结果是表视图单元格自动布局的功能,如here所述。我在故事板中明确地将图标的视图大小设置为50x50,因此表格单元类中的这个覆盖为我解决了问题:
override func layoutSubviews() {
super.layoutSubviews()
if let rect = self.imageView?.frame {
var newRect = rect
newRect.origin = CGPointMake((50-rect.size.width)/2, (50-rect.size.height)/2)
self.imageView!.frame = newRect
}
}
我没有解释为什么将图像从网络复制到本地文件导致它重新定位,也不解释为什么错误定位仅在水平方向上,即使所涉及的所有尺寸都是对称的。 (是的,如果我只调整X位置它会起作用;同样调整Y只是偏执狂。)