【问题标题】:iOS: Add UIView to UITableViewiOS:将 UIView 添加到 UITableView
【发布时间】:2012-03-05 02:56:44
【问题描述】:

我正在尝试在UITableView 上方添加UIView,以模仿iPhone Facebook 风格的菜单。我通过将控制器设为UIViewController 然后添加一个tableview 使其工作正常,但是除非控制器是UITableView,否则我无法将菜单设为静态菜单。

是否可以在 tableview 的顶部添加一个视图,并且只使后台的 tableview 可滚动而不滚动前景中的视图?

这是我的子类UIViewController

但我无法通过 IB 使 tableview 单元格成为静态,因为它不是 UITableView Controller 的子类。

根据 NSJones 代码编辑: 它似乎在某种程度上走上了正确的轨道。但是视图仍然会阻塞表格。如果我从情节提要中删除视图,它将只显示表格。

【问题讨论】:

  • 您可以在后台和该表格视图的顶部拥有一个视图,这样处理会很容易,并且可能会实现您想要的。
  • 当您说“在顶部”时,您的意思是像标题吗?
  • no..背景是uiview,前景是tableview。
  • 我想做前台是UIView,后台是Tableview。我将编辑我的问题以显示我使用 UIViewController 的屏幕截图。

标签: iphone uitableview uiview ios5


【解决方案1】:

您可以像让任何真实事物悬停一样使视图悬停;用看不见的东西撑住它。

基本上,您要做的是创建一个明确的UIView(禁用用户交互),它是您的视图控制器视图的大小,并将其作为子视图添加到您的视图控制器的视图属性中。这样它就隐形地位于顶部。然后您可以向该清晰视图添加一个子视图,并且该子视图不会移动。

编辑:

看起来这种干净整洁的方法对你不起作用,因为你需要你的视图控制器是UITableViewController。这种稍微复杂一点的方法的答案是对UIScrollView 使用委托方法,该方法也适用于UITableView。 Apple 在WWDC2011 - Session 125 - UITableView Changes, Tips, Tricks 视频中对这个概念进行了精彩的演示。如果你能看,我强烈推荐它。这个问题的核心开始于大约36:10

但总而言之,您实现了scrollViewDidScroll: 委托方法。并通过调整视图的位置属性来处理tableview的移动。这里我保留了一个名为viewToKeepStillUIView 属性,仍在使用这种方法。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    // CGFloat stillViewDesiredOriginY; declared ivar
    CGRect tableBounds = self.tableView.bounds; // gets content offset
    CGRect frameForStillView = self.viewToKeepStill.frame; 
    frameForStillView.origin.y = tableBounds.origin.y + stillViewDesiredOriginY; // offsets the rects y origin by the content offset
    self.viewToKeepStill.frame = frameForStillView; // set the frame to the new calculation
}

【讨论】:

  • 我这样做了,但是当菜单打开并且我正在滚动左侧菜单时,它也在使用菜单滚动右侧视图。
  • 我更新了我的答案。我想我知道你是从现在开始的,如果没有的话。
  • 两件事:使用委托方法方法,您试图保持在静态位置的视图应该是您的 tableview 的直接子视图。其次,出于您的目的,您可能可以将“stillViewDesiredOriginY”替换为 0。但您必须对其进行测试。
  • 我也很好奇您是如何创建浮动(固定位置)视图的。
【解决方案2】:

不是将其添加为table view的子视图,而是将其添加为table view的superview的子视图;这样它就不会滚动了。

所以不要这样:

[tableView addSubview:viewController.view];

这样做:

[tableView.superview addSubview:viewController.view];

【讨论】:

  • 似乎不起作用。我做了[self.sideMenu.superview addSubview:self.contentView],它似乎没有显示主要内容。
【解决方案3】:

假设您想要在表格中全时可见的内容,请从包含菜单视图和 UITableView 的视图开始。使表格更小,使其在菜单视图开始的地方结束。表格视图可以使用更少的垂直空间。

【讨论】:

    【解决方案4】:

    如果您将 UIViewController 的视图作为表格视图,那么您的表格将跨越整个屏幕,因此您将无法在其上添加任何内容。

    为什么不尝试以下方法:

    1) create a new UIViewController
    2) add a view on top where you want your menu
    3) in the space left under just drag a table view from the component library 
    4) don't forget to set the 2 table view delegates to be your view controller class
    

    就这些了?

    【讨论】:

    • 我认为你错过了这个问题。我已经有一个带有 tableview 的 UIViewController 并且工作正常。我想做的是用 UITableViewController 复制它,这样我就可以通过 IB 创建静态表菜单。
    • 好吧,我没有得到你想要的静态表,原文说“我无法将菜单设为静态菜单”
    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 2014-08-23
    • 1970-01-01
    相关资源
    最近更新 更多