iPhone 6 plus 的屏幕尺寸问题

Screen size issue on iPhone 6 plus

我在 table 视图中对自定义 header 视图进行了以下实现:

// Create Label
let label = UILabel(frame:CGRectMake(32,8,100,36))
label.text = title

// Create top dark grey rectangle
let headerImageView = UIImageView(frame: CGRectMake(17, 8, 130, 36))
headerImageView.image = UIImage(named: "Section Header")

// Create top rounded corner view with 16px margins
let width = UIScreen.mainScreen().bounds.size.width
let sectionTopImageView = UIImageView(frame: CGRectMake(16, 44, width-32, 4))
sectionTopImageView.image = UIImage(named: "Header Rounded Corners")

// Wrap it up
let headerView = UIView(frame:CGRectMake(0,0, width, 48))
headerView.backgroundColor = UIColor.clearColor()
headerView.addSubview(headerImageView)
headerView.addSubview(sectionTopImageView)
headerView.addSubview(label)

return headerView

所以基本上我想要一个 header 两边都有 16px 的边距。在情节提要中,我有一个背景为 UIImageView 的单元格。此图像视图具有自动布局约束,因此我也可以在那里获得 16 像素的边距。

一切都应该对齐,但是当我 运行 模拟器或真实 iPhone 时,我得到这个 iPhone 6 和更小的屏幕尺寸:

但对于 iPhone 6 Plus,一切都完美对齐:

知道为什么吗?

编辑

我在这里添加单元格背景图片的代码。出于子类化的原因,我将这个背景的创建从故事板中删除到代码中。这是我想出的:

override func awakeFromNib() {
    super.awakeFromNib()
    selectionStyle = .None
    let width = UIScreen.mainScreen().bounds.width
    let height = self.contentView.bounds.size.height

    backgroundImageView = UIImageView(frame: CGRectMake(16, 0, width - 32, height+1))
    backgroundImageView.image = UIImage(named: "Cell Background")

    self.insertSubview(backgroundImageView, atIndex: 0)
}

我对这段代码有和以前一样的问题。但是@robmayoff 的这一行解决了它:

sectionTopImageView.autoresizingMask = [.FlexibleWidth]

这里是同一行:

backgroundImageView.autoresizingMask = [.FlexibleWidth]

导致这种奇怪的行为:

我无法准确测量您的屏幕截图中的内容的大小,因为它们似乎已被调整大小。这让你更难得到帮助。

尽管如此,我认为如果在将子视图添加到 header 视图之前在子视图上设置自动调整大小掩码,您可能会得到更好的结果:

sectionTopImageView.autoresizingMask = [ .FlexibleWidth, .FlexibleTopMargin ]

更新

awakeFromNib 中,self 具有它在故事板或 xib 中的任何大小。它尚未针对设备屏幕或 table 视图或其他任何内容调整大小。

您正在根据设备屏幕尺寸调整 backgroundImageView 尺寸,这(当时)与 self.bounds.size.

无关

如果你认为backgroundImageView.bounds.size.width应该比self.bounds.size.width少32分,那么就这样设置:

backgroundImageView = UIImageView(frame: CGRectMake(16, 0, bounds.size.width - 32, height+1))
backgroundImageView.autoresizingMask = [.FlexibleWidth]