我想集中我的UITableView的内容,其中包含在storyboard和UITableViewCells创建的headerView和footerView.我怎样才能做到这一点?
这是我试图解决我的问题,但这不起作用.
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; CGFloat height = self.tableView.frameHeight - self.navigationController.navigationBar.frameHeight - [UIApplication sharedApplication].statusBarFrame.size.height - (self.rowCount * self.rowHeight); self.tableView.tableHeaderView.frameHeight = height / 2.0; }
所以我减去了navigationBar&的高度. statusBar和cells的高度为tableView的高度,以获取空白区域的高度.
现在我得到了空白区域的高度,我将其分为2为页脚和标题的视图.
解决方法
在viewWillAppear和didRotateFromInterfaceOrientation函数中:
CGFloat headerHeight = (self.view.frame.size.height - (ROW_HEIGHT * [self.tableView numberOfRowsInSection:0]))) / 2; self.tableView.contentInset = UIEdgeInsetsMake(headerHeight,-headerHeight,0);
这将解决您的问题.
编辑
在viewWillLayoutSubviews中调用updateTableViewContentInset函数,并在每次reloadData之后调用:
Ojective-C
- (void)updateTableViewContentInset { CGFloat viewHeight = self.view.frame.size.height; CGFloat tableViewContentHeight = self.tableView.contentSize.height; CGFloat marginHeight = (viewHeight - tableViewContentHeight) / 2.0; self.tableView.contentInset = UIEdgeInsetsMake(marginHeight,-marginHeight,0); }
斯威夫特4
func updateTableViewContentInset() { let viewHeight: CGFloat = view.frame.size.height let tableViewContentHeight: CGFloat = tableView.contentSize.height let marginHeight: CGFloat = (viewHeight - tableViewContentHeight) / 2.0 self.tableView.contentInset = UIEdgeInsets(top: marginHeight,left: 0,bottom: -marginHeight,right: 0) }