【问题标题】:Is it possible to place a UIToolbar below a UICollectionView without a UINavigationController?是否可以在没有 UINavigationController 的情况下将 UIToolbar 放置在 UICollectionView 下方?
【发布时间】:2017-12-29 22:48:24
【问题描述】:

我有一个包含 UICollectionView 和 UIToolbar 的 UICollectionViewController。我想将 UIToolbar 放在 UICollectionView 下方(屏幕底部)。

我现在拥有的是一直到屏幕底部的 UICollectionView,以及在 zorder 中放置在其顶部的 UIToolbar。在下图中,集合视图延伸到工具栏下方。

我知道我可以做到这一点with a NavigationController,但我也读到导航控制器用于向下钻取行为。我不希望这样 - 此工具栏中的项目不一定会更改视图。此外,NavigationController 似乎会使我的代码变得比必要的复杂。

注意,我的 UIToolbar 是通过编程方式添加的。我也尝试将它添加到情节提要中,但我不知道如何将工具栏放置在我的视图中。这是我的故事板:

我无法将工具栏拖到视图中,并且当我运行此工具栏时,情节提要工具栏不会出现。

这个question/answer 看起来好像工具栏可以“对齐”到正确的位置,或者滚动视图可以“重新调整大小”,但我没有看到这种行为。

【问题讨论】:

    标签: ios objective-c uiviewcontroller uitoolbar


    【解决方案1】:

    如果您创建了 UICollectionViewController,则 UICollectionView 是主视图,因此您不能将内容放在其上方或下方,这就是您无法将 UIToolbar 拖到视图上的原因。

    您需要做的是创建一个符合 UICollectionViewDataSource 和 UICollectionViewDelegate 协议的 UIViewController。这将有一个 UIView 作为它的主视图,你可以添加一个 UICollectionView 和一个 UIToolbar 并根据需要定位它们。不要忘记还将 UICollectionView 的数据源和委托链接到您的 UIViewController。

    【讨论】:

    • 谢谢。我这样做了,它甚至没有听起来那么痛苦。
    • 仅供参考,我确实发现这种方法存在一个问题。似乎 UIViewController.viewDidLayoutSubviews 在调用嵌入式 UICollectionView.layoutSubview 方法之前被调用。大概控制器只关注它的即时视图(尽管该函数似乎命名不佳)因为 collectionView 没有 UICollectionViewController 它不清楚在哪里捕获这个事件。
    • 好点但是你可以做的是在 UIViewController.viewDidLayoutSubviews 中调用 UICollectionView.setNeedsLayout 和 UICollectionView.layoutIfNeeded 来让 UICollectioView.layoutSubview 发生在那个时候。
    • 好的,我试试。我发现了这个问题,因为我使用 UIScrollView.setContentOffset 使滚动视图居中,并且它没有像以前那样工作。滚动视图的边界没有同时设置,所以我开始摆弄不同的位置来设置偏移量。
    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 2014-06-16
    相关资源
    最近更新 更多