0

我不想使用UINavigationController. 我想用一个单独的UIToolbar来代替。

要求:

  • 始终在屏幕上可见
  • 应该保持在底部的位置UIView(如工具栏UINavigationController
  • 应该适应它的宽度(例如旋转后)
  • 没有 IB/Storyboard 解决方案
  • 另外:不要隐藏UITableView

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

这适用于viewDidLoada UIViewController,但不适用于viewDidLoada 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 });

出于测试原因,我使用 aUIView而不是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...

4

1 回答 1

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);

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

于 2014-10-28T15:38:21.607 回答