UIImageView 中的 UIImage 位置偏移

UIImage position shifting in UIImageView

我在故事板中有一个 UIImageView,我将来自两个来源之一的 UI 图像存储到其中 - 我从网络或本地资产目录加载图像。在所有情况下,通过检查,图像都​​是 48x48;图像视图恰好是 50x50。除了获取图像的代码(通过 Alamofire+AlamofireImage 或 UIImage:named)之外,其余代码是相同的。通过在 lldb 中检查,加载时的图像对于两个源都是 48x48。

我看到的行为是从网络加载的图像在图像视图中正确居中显示。然而,那些从资产目录加载的内容会移到右侧,并且无论我在图像视图上设置的内容模式如何(我都尝试过)都会如此移动。整个局部图像被移动,使得左边缘不与图像视图的左边缘对齐——它大致位于中心。作为实验,我捕获了一张网络图像并将其存储在目录中;它在显示时也发生了偏移,让我得出结论,问题不在于图像本身。

我的问题是:这两种情况可能有什么不同 - 我从网络加载的 48x48 图像与从资产目录加载的相同图像之间 - 导致本地加载的图像转移到对吗?

这是从资产目录加载的代码:

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.

问题原来是由 table 视图单元完成的自动布局功能引起的,正如 here 所讨论的那样。我已经在故事板中明确地将图标的视图大小设置为 50x50,因此 table 单元格 class 中的这个覆盖为我解决了这个问题:

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也只是偏执狂。)