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]
我在 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]