我有一个UITableViewController。此表视图具有标题视图。 我使用带有autolayout的main.storyboard来设置我的控制器。
在我的main.storyboard中,对于w:任何h:任何,我的视图控制器的预览设置为默认大小600x600。在里面,我的标题视图设置为600x200。
在我的标题视图中,我将imageView设置为Aspect Fill模式:
约束:
在资产中,我的图片大小为@ 2x和@ 3x。
当我编译时,在我为iPhone 5获得的模拟器中:
对于iPhone 6:
对于iPhone 6+:
我不知道如何将tableHeaderView的高度调整为图像的高度,因为此高度取决于设备。
我试图以编程方式设置标题的框架,徒劳无功:
var frame:CGRect!
frame.size.width = self.bgHeaderImageView.image?.size.width
frame.size.height = self.bgHeaderImageView.image?.size.height
self.tableView.tableHeaderView?.frame = frame
我有两个错误:"值可选类型CGFloat?没有打开"
如果我纠正
var frame:CGRect!
frame.size.width = self.bgHeaderImageView.image?.size.width!
frame.size.height = self.bgHeaderImageView.image?.size.height!
self.tableView.tableHeaderView?.frame = frame
我收到了2个错误:" postfix的操作数!应该有可选的类型"
是否可以直接调整故事板中的大小而不是以编程方式调整大小?
我可能在这里遗漏了一些东西......
答案 0 :(得分:3)
我找到了一个解决方案,它不是很干净,但它确实有效。
var kTableHeaderHeight:CGFloat! //expected height of the header tableview
var image: UIImage = UIImage(named: "my-image")!
var frame:CGRect!=self.tableView.tableHeaderView?.frame
if UIScreen.mainScreen().bounds.size.width <= 320 { //iPhone 5 and less
frame.size.width = 320
frame.size.height = 212
} else { //iPhone 6 @2x and iPhone 6+ @3x
frame.size.width = image.size.width
frame.size.height = image.size.height
}
self.tableView.tableHeaderView?.frame = frame
答案 1 :(得分:3)
UITableView tableHeaderView没有纵横比选项,并且在InterfaceBuilder中限制了tableHeaderView的自动布局使用。有许多方法可以实现tableHeaderView的动态高度。如果你想根据标题图像的比例得到tableHeaderView高度,你可以使用:
let width = UIScreen.mainScreen().bounds.size.width
self.height = (width/640) * 209 //calculate new height
self.tableView.tableHeaderView?.frame.size = CGSize(width: self.tableView.tableHeaderView!.frame.size.width, height: self.height)
答案 2 :(得分:0)
试试这个
self.edgesForExtendedLayout = UIRectEdge.None
self.automaticallyAdjustsScrollViewInsets = false
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)
这也是
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
if section == 0
{
return 1
}
else
{
return 40; // your other headers height value
}
}
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if section == 0
{
// Note CGFloat.min for swift
// For Objective-c CGFLOAT_MIN
let headerView = UIView.init(frame: CGRectMake(0.0, 0.0, self.tableView.bounds.size.width, CGFloat.min))
return headerView
}
else
{
// Construct your other headers here
return UIView()
}
}