我将UIView拖到了UITableViewController的UITableView的标题中,这个视图非常适合作为表格的标题,但是具有异常高度,它都在故事板内完成,我想知道如何控制它的高度。无论我在Storyboard中设置的高度是什么,它都不会影响,它总是显示相同的高度。参见附图,灰色部分是UIView作为标题。
答案 0 :(得分:3)
UITableView中有两种类型的标题
假设你在谈论第一个案例。
静态标题视图高度
如果您的标题具有静态高度并且它放在表格视图内的sotrybaord中,您可以在尺寸检查器中提供高度。
动态页眉查看高度
如果标题高度是动态的,则需要采用编程方法。
创建一个标题,所有子视图及其约束,将其连接到表视图控制器中的headerView属性。
创建一个方法updateSizeForHeaderView
,它将根据tableview宽度和标题内的内容更新标题视图高度。
从updateSizeForHeaderView
致电viewWillLayoutSubviews
,以便在屏幕旋转时更新标题视图。
在viewDidLoad
设置标题tableView.tableHeaderView = headerView
多数人。
class TableViewController: UITableViewController {
@IBOutlet var headerView : UIView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableHeaderView = headerView
}
override func viewWillLayoutSubviews() {
updateSizeForHeaderView(inTableView: tableView)
}
func updateSizeForHeaderView(inTableView tableView : UITableView) {
let size = headerView.systemLayoutSizeFittingSize(tableView.frame.size, withHorizontalFittingPriority: UILayoutPriorityRequired, verticalFittingPriority: UILayoutPriorityDefaultLow)
headerView.frame.size = size
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 5
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell_ID", forIndexPath: indexPath)
// Configure the cell...
return cell
}
}
答案 1 :(得分:2)
扩展@BangOperator答案,之后需要在表视图上重新分配标题,否则您可能会遇到奇怪的行为...这迫使表视图进行适当的更新
...
@property (nonatomic, assign) CGSize lastTableViewHeaderSize;
@property (nonatomic, assign) BOOL tableViewHeaderSizeChanged;
@end
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
CGSize size = [self.tableView.tableHeaderView systemLayoutSizeFittingSize:self.tableView.bounds.size withHorizontalFittingPriority:UILayoutPriorityRequired verticalFittingPriority:UILayoutPriorityDefaultLow];
if (!CGSizeEqualToSize(size, self.lastTableViewHeaderSize)) {
CGRect frame = self.tableView.tableHeaderView.frame;
frame.size = size;
self.tableView.tableHeaderView.frame = frame;
self.tableViewHeaderSizeChanged = YES;
}
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
if (self.tableViewHeaderSizeChanged) {
self.tableViewHeaderSizeChanged = NO;
self.tableView.tableHeaderView = self.tableView.tableHeaderView;
}
}
答案 2 :(得分:1)
这可能有效:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 30;
}
答案 3 :(得分:0)