iOS如何将STATIC UITableView和另一个视图添加到同一个视图控制器

lna*_*ger 5 objective-c storyboard uitableview ios

当我创建一个静态表视图并将其放在普通视图控制器中时,我收到一个错误,指出静态表视图必须在UITableViewController中.

我想要的是iPad上的一个视图,它有一个占据屏幕大部分的静态表格视图,但是它下面的标准UIView始终保持可见,并且有几个标签,我根据表格视图中的内容进行更新.

有没有办法使用UITableViewController并使tableView不是全屏,以便我可以在故事板中添加子视图?

如果不是,可以在代码中完成吗?

任何提示将不胜感激!

Mar*_*nek 6

你需要的是一个常规的UITableViewController(所以你得到所有的静态单元行为),然后你的视图作为表视图的子视图,但管理使它始终坚持在屏幕的底部.Apple将此演示为WWDC.这就是我的所作所为(在我的例子中,我有一个UIDatePicker我总是希望锚定在底部):

viewDidLoad,创建视图并将其添加为表视图的子视图.将它放在表格视图的底部.

[self.tableView addSubview:self.datePicker];
[self updateDatePickerBounds];
Run Code Online (Sandbox Code Playgroud)

实现,scrollViewDidScroll以便您可以在表视图滚动时强制将视图强制显示在屏幕底部:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    // Keep the date picker floating above the table view, anchored to the bottom of the view
    [self updateDatePickerBounds];
}
Run Code Online (Sandbox Code Playgroud)

然后实现一个正确定位视图的函数:

- (void) updateDatePickerBounds
{
    // Keep the date picker floating above the table view, anchored at the bottom
    CGRect tableBounds = self.tableView.bounds;
    CGRect pickerFrame = self.datePicker.frame;
    pickerFrame = CGRectMake(tableBounds.origin.x,
                             tableBounds.origin.y + CGRectGetHeight(tableBounds) - CGRectGetHeight(pickerFrame),
                             tableBounds.size.width,
                             pickerFrame.size.height);
    self.datePicker.frame = pickerFrame;
}
Run Code Online (Sandbox Code Playgroud)

最后,如果您不希望表格视图位于底部视图下方,只需将表格视图设置为与视图的contentInset高度相匹配即可.

我也叫我的updateDatePickerBounds方法viewWillAppear.我忘记了为什么我必须这样做.

  • 是的,这就是我所说的 - 一个使用静态单元设置的UITableViewController.您可以使用我描述的技术在表视图上方浮动视图.我已经好几次了. (2认同)

Mic*_* T. 0

真正的答案是创建一个自定义容器控制器。

例如,您可以在导航控制器内有一个静态表视图。因此,您需要创建一个容器类,例如导航控制器或任何您的容器类,并将静态表视图控制器添加到其中。