iPhone 6 plus 的屏幕尺寸问题

Posted

技术标签:

【中文标题】iPhone 6 plus 的屏幕尺寸问题【英文标题】:Screen size issue on iPhone 6 plus 【发布时间】:2016-04-11 16:03:27 【问题描述】:

对于表格视图中的自定义标题视图,我有以下实现:

// 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

所以基本上我想要一个两边都有 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]

导致这种奇怪的行为:

【问题讨论】:

你把这些代码放在什么函数里? @robmayoff func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 【参考方案1】:

我无法准确测量您屏幕截图中事物的大小,因为它们似乎已调整大小。这让您更难为您提供帮助。

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

sectionTopImageView.autoresizingMask = [ .FlexibleWidth, .FlexibleTopMargin ]

更新

awakeFromNib 中,self 在情节提要或 xib 中具有任何大小。它尚未针对设备屏幕或表格视图或其他任何内容调整大小。

您正在根据设备屏幕尺寸调整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]

【讨论】:

您好,感谢您的回答。有效 !我试图删除.FlexibleTopMargin,它也有效。但是你能解释一下为什么会这样吗? (以及为什么以前没有)此外,当在 awakeFromNib 函数中应用类似代码时,它似乎不起作用。 表格视图调整标题视图的大小以适合表格。它使标题视图更宽。通过设置.FlexibleWidth,您告诉图像视图以相同的量变宽。我不知道为什么需要调整标题视图的大小,但显然确实如此。如果您需要帮助,您必须编辑您的问题以包含 awakeFromNib 代码。 感谢您的精彩回答!

以上是关于iPhone 6 plus 的屏幕尺寸问题的主要内容,如果未能解决你的问题,请参考以下文章

模拟器上奇怪的 iphone 6 plus 屏幕尺寸(与启动屏幕图像相比)

iphone 6 和 6 plus 尺寸缩放

Phonegap + iphone 6 屏幕尺寸问题

iPhone屏幕尺寸/导航高度

所有 iOS 屏幕尺寸的启动屏幕图像尺寸

处理屏幕尺寸的正确方法