如何快速调整表格视图标题的高度?
Posted
技术标签:
【中文标题】如何快速调整表格视图标题的高度?【英文标题】:How to adjust the height of the header of a tableview in swift? 【发布时间】:2015-03-21 19:52:12 【问题描述】:我有一个 UITableViewController。这个表视图有一个标题视图。 我使用带有自动布局的 main.storyboard 来设置我的控制器。
在我的 main.storyboard 中,对于 w:Any h:Any,我的视图控制器的预览设置为默认大小 600x600。在里面,我的标题视图设置为 600x200。
在我的标题视图中,我将 imageView 设置为 Aspect Fill 模式:
约束:
在资产中,我的图片有@2x 和@3x 大小。
header-image@2x.png -> 750x498 header-image@3x.png -> 1242x825当我编译时,在我为 iPhone 5 获得的模拟器中:
对于 iPhone 6:
对于 iPhone 6+:
对于 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
我收到 2 个错误:“Value optional type CGFloat? not unwrapped”
如果我用
纠正 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 个错误:“后缀的操作数!应该有可选类型”
是否可以直接调整情节提要中的大小而不是通过编程方式?
我可能在这里遗漏了一些东西......
【问题讨论】:
【参考方案1】:UITableView tableHeaderView 没有纵横比选项,并且 tableHeaderView 的自动布局使用在 InterfaceBuilder 中受到限制。有很多方法可以实现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】:我找到了一个解决方案,它不是很干净,但它确实有效。
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
【讨论】:
感谢分享您的解决方案!你帮我解决了一个类似的问题,我想分享一下,以防其他人遇到它:我有一个 uisearchbar 和 uibuttons 而不是 uiimageView 作为背景,而 tableHeaderView (和 tableFooterView )的高度会很大并延伸到整个屏幕高度。我不敢相信 Interface Builder 没有可能解决这个问题,或者这个错误首先发生 - 对我来说,这似乎是 SDK 中的一个错误,并且在 viewDidLoad 中明确设置框架解决了它。 (ios 8.2 & XCode 6.2 & OS X 10.9.5) 这太可怕了。【参考方案3】:试试这个
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()
【讨论】:
以上是关于如何快速调整表格视图标题的高度?的主要内容,如果未能解决你的问题,请参考以下文章