将UIToolbar放在UITableViewController上方的屏幕底部

时间:2014-10-24 12:19:19

标签: ios uitableview autolayout uitoolbar uitoolbarposition

我不想使用UINavigationController的工具栏。我想改为使用单独的UIToolbar

要求:

  • 始终在屏幕上显示
  • 应该留在UIView底部的位置(就像UINavigationController的工具栏一样)
  • 应调整其宽度(例如旋转后)
  • 没有IB /故事板解决方案
  • 此外:不要隐藏UITableView
  • 的内容

我想为此使用自动布局。尽管我的代码是在C#中,但您始终可以为Objective-C提供解决方案。

这适用于viewDidLoad上的UIViewController,但viewDidLoad上的UITableViewController不适用:

UIView toolbar = new UIView ();
toolbar.BackgroundColor = UIColor.Red;
toolbar.TranslatesAutoresizingMaskIntoConstraints = false;

View.AddSubview (toolbar);

NSLayoutConstraint toolbarBottom = NSLayoutConstraint.Create (toolbar, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, BottomLayoutGuide, NSLayoutAttribute.Top, 1, 0);
NSLayoutConstraint toolbarLeft = NSLayoutConstraint.Create (toolbar, NSLayoutAttribute.Left, NSLayoutRelation.Equal, View, NSLayoutAttribute.Left, 1, 0);
NSLayoutConstraint toolbarRight = NSLayoutConstraint.Create (toolbar, NSLayoutAttribute.Right, NSLayoutRelation.Equal, View, NSLayoutAttribute.Right, 1, 0);
NSLayoutConstraint toolbarHeight = NSLayoutConstraint.Create (toolbar, NSLayoutAttribute.Height, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 1, 40);

this.View.AddConstraints (new NSLayoutConstraint[] { toolbarBottom, toolbarLeft, toolbarRight, toolbarHeight });

出于测试原因,我使用的是UIView而不是UIToolbar。结果非常相似。在UIViewController上显示红色视图。在UITableViewController它根本不显示。

我在不使用自动布局的情况下进行了另一项测试:

RectangleF toolbarFrame = new RectangleF (0, this.View.Bounds.Height - 44,  this.View.Bounds.Width, 44);
UIView toolbar = new UIView (toolbarFrame);
toolbar.BackgroundColor = UIColor.Red;
View.AddSubview (toolbar);

此处显示UIView,但它位于表格视图中的固定位置,分隔线闪烁。不是我想要的,但似乎可以在UIToolbar上放置UITableView ...

1 个答案:

答案 0 :(得分:0)

我使用了容器视图。主要空间是表格视图,下面是工具栏。这很有效。

这些是我的一些约束:

documentListTop = NSLayoutConstraint.Create (documentListController.View, NSLayoutAttribute.Top, NSLayoutRelation.Equal, TopLayoutGuide, NSLayoutAttribute.Bottom, 1, 0);
//documentListBottom = NSLayoutConstraint.Create (documentListController.View, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, BottomLayoutGuide, NSLayoutAttribute.Top, 1, 0);
ocumentListBottomToolbar = NSLayoutConstraint.Create (documentListController.View, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, toolbar, NSLayoutAttribute.Top, 1, 0);
documentListLeft = NSLayoutConstraint.Create (documentListController.View, NSLayoutAttribute.Left, NSLayoutRelation.Equal, View, NSLayoutAttribute.Left, 1, 0);
documentListRight = NSLayoutConstraint.Create (documentListController.View, NSLayoutAttribute.Right, NSLayoutRelation.Equal, View, NSLayoutAttribute.Right, 1, 0);
toolbarBottom = NSLayoutConstraint.Create (toolbar, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, BottomLayoutGuide, NSLayoutAttribute.Top, 1, 0);
toolbarTop = NSLayoutConstraint.Create (toolbar, NSLayoutAttribute.Top, NSLayoutRelation.Equal, documentListController.View, NSLayoutAttribute.Bottom, 1, 0);
toolbarLeft = NSLayoutConstraint.Create (toolbar, NSLayoutAttribute.Left, NSLayoutRelation.Equal, View, NSLayoutAttribute.Left, 1, 0);
toolbarRight = NSLayoutConstraint.Create (toolbar, NSLayoutAttribute.Right, NSLayoutRelation.Equal, View, NSLayoutAttribute.Right, 1, 0);
toolbarHeight = NSLayoutConstraint.Create (toolbar, NSLayoutAttribute.Height, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 1, 44);

工具栏现在始终可见,并且不会隐藏表格视图。一个缺点是处理更复杂(例如,当处于弹出窗口时,传递数据时......)。也许弹簧和支柱有更好的方法......

相关问题