【问题标题】:Pinning a UIView to the top of the screen programaticaly以编程方式将 UIView 固定到屏幕顶部
【发布时间】:2020-08-17 07:26:48
【问题描述】:

这可能是一个简单的问题,但我很难在互联网上找到一个可以解释的答案。从 CSS 中设置元素的“位置:固定”的快速等价物是什么?我试图将 UIView 固定到屏幕顶部,这样即使滚动我仍然可以看到屏幕顶部的视图。感谢任何建议或教程链接,谢谢!

编辑: 我可能应该提到我的视图最初是我的 viewController 的一个子视图,而我的 tableview 也是我的 viewController 的一个子视图,放在它下面。我正在使用 IQKeyboardManagerSwift 可可豆荚,它正在向上移动整个视图,包括我的标题。

【问题讨论】:

  • 所以你想让一个tableView出现在另一个视图下面?
  • 我想要一个视图,它是主视图的子视图,无论如何都位于屏幕顶部。类似于标题
  • 那么您将有两个视图。您的“标题”,然后是标题下方的滚动视图(或 tableView 或 collectionView)。您需要学习如何使用自动布局。您需要做的是将滚动视图的顶部限制在标题的底部,并将标题限制在顶部布局指南中。你应该能够找到大量的教程。

标签: ios swift nslayoutconstraint iqkeyboardmanager


【解决方案1】:

要将视图固定到某个位置,您可以使用Layout Anchors。试试:

yourView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true

如果您想了解更多信息:

【讨论】:

  • 用这种方法还需要做相框吗?即 exampleView.frame = CGRect(x: ???, y: ???, width: view.frame.width, height: 100)
  • 不,如果您正确设置其他锚点,则无需定义框架。请参阅@Fabio 的回答。它应该可以解决问题。如果您还有其他问题,请告诉我。
【解决方案2】:

一个轻松的方法是使用带有标题的 UITableView。默认情况下,表视图标题是粘性的。 Here 是文档的链接。

【讨论】:

  • 如果我使用 IQKeyboardManagerSwift 可可豆荚,你知道标题是否会被推离屏幕或保留在 tableview 可见部分的顶部?
  • 虽然我从未使用过这个 pod,但理想情况下它不应该破坏标准的表格视图布局。许多应用程序的搜索栏都内置在表头中(例如:iPhone 联系人应用程序)。
  • 谢谢 我必须检查一下,您是否建议也使用页脚,用于类似于消息传递应用程序的文本视图?
【解决方案3】:

听起来你想要一个浮动标题。您不能在 collectionView 或 tableView 上添加视图,因此如果不显示带有直通视图的单独弹出框,您将无法固定视图。必须关闭此弹出框以显示警报或显示其他视图控制器,因此在我看来这不是一个可行的解决方案。

也许这篇文章会对你有所帮助(我怀疑你会想要设置标题的样式): How to make Supplementary View float in UICollectionView as Section Headers do in UITableView plain style

【讨论】:

    【解决方案4】:

    自动布局不需要框架,您可以在 viewDidLoad 中执行此操作: 首先禁用 yourView 上的默认约束:

    yourView.translatesAutoresizingMaskIntoConstraints = false
    

    在控制器视图中显示 yourView 后:

    view.addSubview(yourView)
    

    现在在控制器视图的顶部安全区域设置自动布局位置,宽度是视图宽度,高度是 100,就像评论中的框架示例一样:

    yourView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
    yourView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
    yourView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
    yourView.heightAnchor.constraint(equalToConstant: 100).isActive = true
    

    这是将 yourView 置于顶部的自动布局方法... 将其适应您的项目,将“yourView”替换为您要置于顶部的视图的名称。如需更准确的信息,请下次在应用程序中输入代码...祝您有美好的一天:)

    【讨论】:

    • 不幸的是,这也不起作用,我猜是因为我使用了 IQKeyboardManagerSwift 可可豆荚。
    猜你喜欢
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多