0

のツールバーを使用したくありませんUINavigationControllerUIToolbar代わりにセパレートを使用したい。

要件:

  • 常に画面に表示
  • の下部の位置にとどまる必要がありますUIView(のツールバーのようにUINavigationController)
  • 幅を調整する必要があります(例:回転後)
  • IB/ストーリーボード ソリューションなし
  • さらに: のコンテンツを非表示にしないでください。UITableView

これには自動レイアウトを使用したいと思います。私のコードは C# ですが、Objective-C のソリューションはいつでも提供できます。

これは では機能しviewDidLoadますが、では機能しUIViewControllerません:viewDidLoadUITableViewController

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ます...

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

ツールバーが常に表示されるようになり、テーブル ビューが非表示になりません。欠点の 1 つは、処理がより複雑になることです (たとえば、ポップオーバーの場合、データを渡す場合など)。おそらく、スプリングとストラットを使用したより良い方法があります...

于 2014-10-28T15:38:21.607 に答える