创建一个坚持UITableView底部的UIView

时间:2013-08-11 21:25:36

标签: ios objective-c

我有一个grouped UITableView,我想在我UITableView的最底部添加一个UIButton。我正在使用Storyboard和UITableViewController。我不太确定我需要添加代码或拖放UI元素。我已经尝试在Storyboard中添加一个UIView作为footerview,然后在该视图中添加一个按钮,但这并不具有始终保持在视图底部的预期效果,类似于tabbar。此外,按钮应始终位于最前端,UITableView应在其后滚动。

// tried this but it didn't work:
self.tablview.tableFooterView = [[UIView alloc] initwithview...]

7 个答案:

答案 0 :(得分:9)

如果您希望UIButton位于屏幕底部而不管UITableView的滚动位置(即不在UITableView内),那么您可能不应该使用一个UITableViewController子类。相反,如果您使用UIViewController子类,则只需将UITableView添加到根view属性并添加UIButton或其他一些视图(例如{{1} 1}}等,具有适当的布局约束,将其放置在屏幕的底部 - 或者您想要的位置。对于UIToolbar子类,这实际上是不可能的,因为根UITableViewController属性必须是view实例。

答案 1 :(得分:5)

好的,如果你想直接将工具栏添加到UITableViewController,你可以按照this tutorial中的说明创建一个“假的”页脚视图。

如果您对快速简便感兴趣,请按照@CharlesA上面的答案提供者进行操作,但如果您使用带有UIBarButtonItem的标准工具栏而不仅仅是圆形矩形按钮,它可能看起来更好。

如果您使用的是导航控制器,那么您可以取消隐藏工具栏(因为导航控制器已经附带了一个),并添加一个按钮来执行您需要的操作。编码将是这样的:

[self.navigationController setToolbarHidden:NO];

UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithTitle: @"Button Name"
                                            style: UIBarButtonItemStyleBordered
                                           target: self
                                           action: @selector(yourMethod:)];

self.toolbarItems = [ NSArray arrayWithObjects: buttonItem, nil ];

IMO的方法是创建UIViewController而不是UITableViewController。向VC添加TableView,将TableView的底部抬高到足以适合其下的工具栏,拖放工具栏,将UIBarButtonItem拖放到其上。按住Control键并单击UIBar按钮项,然后创建IBAction

快速,简单,漂亮。

答案 2 :(得分:3)

有一种方法可以在不使用UIViewController子类的情况下将视图添加到UITableViewController的底部。

UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, footerY, footerWidth, footerHeight)];
[self.navigationController.view addSubview:footerView];

希望这有帮助!

答案 3 :(得分:2)

我想为现有解决方案提供另一种解决方案。您可以在主视图中使用普通ViewController,其中包含粘滞视图。然后,向container view添加ViewController以显示该表,并添加另一个应成为粘滞视图的视图。

现在可以将container view指向您的TableViewController,并为粘滞视图添加约束,使其保持在表格下方。

Storyboard in Xcode

因此,表格不会与粘滞视图重叠,粘滞视图始终位于屏幕底部。此外,此概念不需要对现有TableViewController进行任何更改。

Sticky view live demo

答案 4 :(得分:1)

实际上,您可以添加UIButton以粘贴在视图的底部(或标题)中,如果您使用UITableViewControllerUIViewController

,则无关紧要

Swift 3

创建按钮:

对于XY,我应用了整个视图大小,这样我就可以使用-添加我喜欢的余量。然后,只需设置大小和宽度。

let myButton: UIButton = UIButton(CGRect(x: self.view.bounds.size.width - 66, y: self.view.bounds.size.height - 66, width: 50, height: 50))

注意

  

查看宽度和高度66的方式?好吧,你需要添加你的   边距高度和宽度的按钮。在这种情况下,50 + 16 = 66。此外,以这种方式添加背景颜色和其他属性   你的按钮可见。

将视图添加到NavigationController

self.navigationController?.view.addSubview(myButton)

我确定你可以在Swift 2,1或Objective-C中弄清楚如何做到这一点。

答案 5 :(得分:0)

我通过执行以下操作在swift 1.2中使用TableViewController实现了这一点(如果人们遇到这种情况,就像我在寻找快速解决方案时那样)。

在故事板上放置TableViewController后,将View拖到控制器上。根据需要进行设置,右键单击(或按住Ctrl键单击)并拖动到源中以创建IBOutlet。然后单击并将视图拖动到顶部栏view in top bar。更改为TableViewController的源代码,您需要派生UIScrollViewDelegate。您需要设置tableView.delegate = self,然后才能执行以下操作

self.tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, floatingView.frame.height, 0.0)
        self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0.0, 0.0, floatingView.frame.height, 0.0)

        floatingView.frame.origin.y = self.tableView.bounds.origin.y + self.tableView.frame.height - floatingView.frame.height
        floatingView.autoresizingMask = UIViewAutoresizing.FlexibleTopMargin
        self.view.addSubview(floatingView)

然后

override func scrollViewDidScroll(scrollView: UIScrollView) {

        floatingView.frame = CGRectMake(self.floatingView.frame.origin.x, self.tableView.bounds.origin.y + self.tableView.frame.height - floatingView.frame.height, self.floatingView.frame.size.width, self.floatingView.frame.size.height)
    }

答案 6 :(得分:0)

是的,可以在UITableViewConroller中使用

    let bottomView = UIView()
    bottomView.backgroundColor = .red // or your color
    bottomView.frame = CGRect(x: 0, y: UIScreen.main.bounds.size.height - 78, width: tableView.frame.size.width, height: 78) // 78 or your size of view
    navigationController?.view.addSubview(bottomView)
    tableView.tableFooterView = UIView()

enter image description here