【问题标题】:Make UIButton stick on bottom of UITableView使 UIButton 粘在 UITableView 的底部
【发布时间】:2017-05-09 22:28:29
【问题描述】:

我有一个由原型单元组成的 UITableView。我想使用 Interface Builder 将 UIButton inside UITableView 的底部

我在 UITableView 的页脚中添加了 UIButton:

我为页脚视图添加了紫色背景,为 UITableView 添加了绿色背景色。在上图中,它显示了页脚底部的按钮。但是这不等于 UITableView 的底部。

下面的 GIF 显示按钮位于单元格下方,但不在 UITableView 底部。我希望它出现在 UITableView 的底部 in 中。不在 UITableView 。下面的 GIF 显示了这个问题:

我的问题是:如何使用 Interface Builder 在 UITableView底部 处设置 UIButton inside UITableView?

这就是我想要实现的目标(来自 Apple 的 ResearchKit):

编辑:UIButton 应该在 UITableView 内。将 UIButton 放置在 TableView 之外并固定在下面的建议没有达到我的目标。

【问题讨论】:

  • 按钮在底部。 “底部”根本没有您期望的那么低。您是否尝试过直接将按钮添加到表格视图?还是 tableview 本身所在的视图?
  • 按钮确实在Footer视图的底部,但不在UITableView的底部。据我所知,直接向表格视图添加按钮是不可能的,它必须在单元格的内容视图或自定义视图中(如页脚视图)。我不想在 tableview 的视图中使用按钮,因为这意味着按钮不在 tableview 内,这意味着它不会随着 tableview 上下滚动。
  • 当您的UITableView 高度超过其内容高度时,您希望按钮的什么行为?
  • UITableView 固定在 superView 的底部。该按钮应该在 tableViews 底部的底部上方一点。像这样:developer.apple.com/ios/human-interface-guidelines/images/…
  • 如果你想让按钮贴在屏幕底部。在情节提要中的 tableview 之后将其添加到 viewController 本身上,以便在视觉方面高于它。

标签: ios swift uitableview uibutton interface-builder


【解决方案1】:

我尝试了接受的答案,但无法正常工作。我发现页脚视图总是固定在屏幕底部,无论 TableView 的大小如何(就像它是 TableView 的兄弟一样)。我最终遵循了这里建议的方法:https://stackoverflow.com/a/18047772/5778751 基本思想是您以编程方式确定 TableView 的高度,并根据结果,您要么显示 TableView 内部的页脚,要么显示一个视图,它是表格视图。

【讨论】:

    【解决方案2】:

    所以我不得不稍微调整一下,但通过执行以下操作使其正常工作:

    1. 将 UIButton 拉出到与视图继承关系相同的级别 表格视图。
    2. 在视图中嵌入表格视图和按钮
    3. 将上面的视图嵌入到另一个视图中
    4. 将视图 #3(固定视图)的边缘固定到超级视图
    5. 固定视图#2 的顶部、左侧和右侧边缘(调整视图大小)以查看#3 边缘。并设置一个等高的约束来查看#3。
    6. 在视图控制器中为等高约束设置一个出口

    IB 中的视图继承应该如下所示:

    现在在视图控制器代码中,你需要做以下事情:

    1. 为键盘偏移值创建实例变量

      var keyboardOffset: CGFloat = 0
      
    2. 为键盘设置通知和观察者 willShow 和 将隐藏

      notificationCenter.addObserver(self, selector: #selector(keyboardWillShow(_:)), name:NSNotification.Name.UIKeyboardWillShow, object: nil)
      notificationCenter.addObserver(self, selector: #selector(keyboardWillHide(_:)), name:NSNotification.Name.UIKeyboardWillHide, object: nil)
      
    3. 在keyboardWillShow中,缓存键盘高度值。

      if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
      
          keyboardOffset = keyboardSize.height
      }
      
    4. 在keyboardOffset var上创建didSet方法,并在每次设置时根据该值对视图的高度进行动画处理

      var keyboardOffset: CGFloat = 0 {
          didSet {
              resizingViewHeight.constant = -keyboardOffset
      
              UIView.animate(withDuration: 0.2) { 
                  self.view.layoutIfNeeded()
              }
          }
      }
      
    5. 确保在 keyboardWillHide 中将偏移量设置回 0

      keyboardOffset = 0
      

    现在每次出现键盘时,包含 tableview 的视图都会减小大小,因此会将内容拉上来,从而提供您正在寻找的缩小的 tableview 效果!

    【讨论】:

    • 这正是我后来实现的,这个答案涵盖了我所做的方法。谢谢你。 :)
    【解决方案3】:

    您设置页脚宽度错误。将其设置为固定高度,以便按钮保持在该特定高度(应该固定为 60px)

    检查 Demo Code 了解情节提要结构和约束

    【讨论】:

    • 感谢您的回复。但是我注意到,使用较小的单元格会导致按钮仍然被放置在单元格的下方,但不是在 UITableView 的底部。
    • @Hapeki ,试试 Apple 的 2 到 3 单元格示例。粘在细胞上的效果是一样的。这就是它的工作原理。页脚发生在 tableView 的单元格内容结束的地方。你自己搞糊涂了
    • 是的,在 Apple 的示例中,有 2 到 3 个单元格,按钮仍位于 UITableView 的底部,看起来像是固定位置。您提供的解决方案与我在原始帖子中发布的解决方案相同:我的示例中的按钮显然是在屏幕中间随 TableView 上下移动,但这不是我希望按钮所在的位置.
    【解决方案4】:

    页脚总是出现在表格视图的最后一个单元格之后,因此您的输出是正确的。

    如果您想要表格视图底部的按钮,则在层次结构中的表格视图下方添加按钮,而不是作为页脚。但这使您的按钮成为静态的,这意味着您拥有多少单元格并不重要,按钮始终是 tableView 的按钮,但它不像现在这样可滚动。

    【讨论】:

    • 这意味着 UIButton 没有与 UITableView 一起滚动。
    • 是的!你说的对。如果您将按钮放在表格视图中作为页脚,那么它将处于滚动状态,然后按钮会出现在单元格的底部,例如如果有 60 个单元格,那么按钮将在滚动 60 个单元格后出现(如果按钮位于页脚中)。但是,如果您遵循上述答案,则按钮是静态的,因为它不再是 tableview 的一部分。
    • 是的,但在这个特定的应用程序中,我希望按钮始终出现在单元格的底部而不是 tableview 的底部:)
    【解决方案5】:

    UITableView 所在的UIViewController 底部添加一个包含UIButton 的视图。给它附加约束以附加到超级视图的左侧、右侧和底部,并且可能是固定高度。

    然后将UITableView 的底部约束附加到包含UIButton 的视图的顶部。

    你应该得到你想要的效果。

    注意:对于按钮,您可以在 superview 约束中提供居中的 Y 和 X 以使其保持居中。

    【讨论】:

    • 这意味着 UIButton 将在 TableView 之外并且在视图中将是静态的。它不会随着 tableView 的滚动而移动。
    • 没错。我认为这就是您要寻找的行为。因为它看起来与您在 gif 中显示的相反。您能否详细说明您希望它如何工作?
    • 我编辑了这个问题,并举例说明了我想要实现的目标。 :)
    • 所以要清楚。当单元格比屏幕高度少时,您希望按钮贴在屏幕底部,当单元格比屏幕高度多时,您希望它贴在表格视图的底部,对吗?
    • 当单元格数少于屏幕高度时,您希望按钮贴在屏幕底部:正确。当单元格数超过屏幕高度时,您希望它贴在表格视图的底部:正确。在我原始帖子的所需示例中,您会看到单元格比屏幕高度多,我必须一直向下滚动才能看到按钮。这正是我想要的。
    猜你喜欢
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    相关资源
    最近更新 更多