【问题标题】:ToolBar between UINavigationBar and UITableView?UINavigationBar 和 UITableView 之间的 ToolBar?
【发布时间】:2013-07-24 04:29:28
【问题描述】:

我在 UINavigationController 上嵌入了一个 UITableViewController。这个 tableView 是 NSFetchedResultsController 的一个实例。 我需要在 NavigationController 的顶部栏和 TableViewController 之间添加一个 Toolbar,但我不知道该怎么做(我什至不知道这是否可能)。 我想像 Apple 对他们的 WWDC 应用程序所做的那样(除了他们没有在 NavigationController 中嵌入 TableViewController)。 我需要在栏上设置一些控件来驱动 NSFetchedResultsController。

有些人建议有类似问题的人使用 UITableView 而不是 TVC,但我确实需要一个 TVC 作为 NSFetchedResultsController 的实例。

关于如何做到这一点的任何想法? 我必须以编程方式进行吗?如果有,怎么做?

顺便说一句,我的目标是带有故事板和 ARC 的 iOS6+。

【问题讨论】:

  • 你能把你的示例代码发给我们吗..以便我们实施

标签: iphone ios objective-c uitableview


【解决方案1】:

我更喜欢的方法是在外层使用UIViewController,包含您的工具栏和包含表格的容器视图。然后在单独的UITableViewController 中构建您的表格,并使用嵌入segue 将其连接到容器视图中。总的来说,我认为这使得代码更加模块化并且更容易理解,因为高级结构在故事板中布局。

使用embed segue的步骤如下:

  1. 按住 Control 从容器视图拖动到要嵌入的视图控制器,然后选择“嵌入”选项。
  2. 在属性检查器中为嵌入 segue 提供一个标识符。
  3. 在父级的 prepareForSegue 方法中配置表视图控制器,检查您的 segue 标识符。

在我的VCollectionViewGridLayout 库中有一个这样的例子。查看 Sort & Filter 示例项目。

【讨论】:

  • 确实是模块化的!我可以重复使用我的 TVC!效果很好!
【解决方案2】:

Technical Note TN2154: UIScrollView And Autolayout 提供了另一种解决方案:

请注意,您可以通过在视图和滚动视图的子树之外的视图(例如滚动视图的超级视图)之间创建约束,使滚动视图的子视图看起来浮动(不滚动)在其他滚动内容之上。

也就是说,即使滚动视图(例如表格视图)修改了子视图的框架,自动布局引擎也会在下一次布局传递时将其重置。

【讨论】:

  • 谢谢@Aaron。我只是想让这个工作,但子视图仍在与表格视图一起滚动。你能提供任何示例代码吗?谢谢!
  • 由于self.tableView 没有超级视图,因此我无法使用 UITableViewController(没有容器视图)进行此操作。在 UINavigationController 和浮动视图之间创建约束也不起作用,因为它们位于不同的视图层次结构中,这会使应用程序崩溃。
  • self.tableView 确实有一个超级视图,尽管它可能尚未在 viewDidLoad 中设置。创建一个基本的UITableViewController,一旦调用viewWillAppear:,你就会看到self.tableView.superview 不是nil
  • 啊,明白了 :) 它有效!我确实必须禁用viewWillDisappear 上的约束,以阻止视图在再次删除超级视图时消失:self.balanceView.translatesAutoresizingMaskIntoConstraints = YES;
【解决方案3】:

你需要使用 UIViewController,然后在 storyboard 里面添加工具栏和 NSFetchedResultsController 类的 tableView 实例

【讨论】:

    【解决方案4】:

    您可以为任何 UIView 创建一个 topBar,然后将其作为 tableHeaderView 传递。 它可能会帮助你。

    【讨论】:

      【解决方案5】:

      使用UIViewController 而不仅仅是UITableViewController,您可以轻松地放置除UITableView 之外的其他控件。

      希望这会有所帮助。

      【讨论】:

        【解决方案6】:

        您可以使用 UITableViewController(保留 UIRefreshControl 支持和避免键盘等细节)。您只需将工具栏嵌入到普通视图中并将其放置在 tableHeaderView 中。然后实现这个滚动视图委托方法来锁定。

        #pragma mark - UIScrollViewDelegate
        
        - (void)scrollViewDidScroll:(UIScrollView *)scrollView
        {
            CGRect rect = self.toolbarContainerView.frame;
            rect.origin.y = MIN(0,scrollView.contentOffset.y + scrollView.contentInset.top);
            self.toolbarContainerView.frame = rect;
        }
        

        请注意,如果您还使用节标题,则必须将这些视图发送到 tableHeaderView 后面,否则它们将漂浮在 tableHeaderView 上。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-10
          • 1970-01-01
          • 2016-09-24
          • 1970-01-01
          • 2020-01-25
          相关资源
          最近更新 更多