我不想使用UINavigationController
的工具栏。我想改为使用单独的UIToolbar
。
要求:
UIView
底部的位置(就像UINavigationController
的工具栏一样)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
...
答案 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);
工具栏现在始终可见,并且不会隐藏表格视图。一个缺点是处理更复杂(例如,当处于弹出窗口时,传递数据时......)。也许弹簧和支柱有更好的方法......