我在表视图中有自定义标题视图的以下实现:
// 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边距的标题。在Storyboard中,我有一个背景为UIImageView
的单元格。此图像视图具有自动布局约束,因此我也可以获得16个边距px。
所有东西都应该对齐但是当我运行模拟器或真正的iPhone时,我会为iPhone 6和更小的屏幕尺寸得到这个:
知道为什么吗?
修改
我在这里添加了单元格背景图像的代码。对于子类化原因,我将此背景的创建从故事板移除到代码。以下是我提出的建议:
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]
答案 0 :(得分:1)
我无法准确衡量屏幕截图中的内容大小,因为它们似乎已调整大小。这使得你很难帮助你。
尽管如此,如果您在将子视图添加到标题视图之前在子视图上设置自动调整模板,我认为您可能会有更好的结果:
gem: 'jekyll', '3.1.2'
gem 'jekyll-paginate'
gem 'kramdown'
gem 'rouge'
gem 'jekyll-gist'
gem 'jekyll-watch'
gem 'rails', '4.1.0.rc2'
gem 'rack-cache'
gem 'nokogiri', '1.6.1',
gem: 'Bundler'
gem 'rake'
gem 'foreman'
gem 'thin'
gem 'rack-contrib'
在sectionTopImageView.autoresizingMask = [ .FlexibleWidth, .FlexibleTopMargin ]
中,awakeFromNib
具有故事板或xib中的大小。尚未针对设备屏幕或表格视图或其他任何内容调整大小。
您根据设备屏幕尺寸确定self
的尺寸,该尺寸(此时)与backgroundImageView
无关。
如果您认为self.bounds.size
应该比backgroundImageView.bounds.size.width
小32点,那就按照这样的方式设置:
self.bounds.size.width