从 UICollectionViewCell 到 ViewController 的自动布局约束

Posted

技术标签:

【中文标题】从 UICollectionViewCell 到 ViewController 的自动布局约束【英文标题】:Auto Layout Constraint from UICollectionViewCell to View from ViewController 【发布时间】:2014-02-06 05:41:49 【问题描述】:

我有可以水平滚动的 UICollectionView。 我想将约束添加到从 ViewController 获取的主视图中。

因为这是 UICollectionView 的单元格而不是他的子视图,xcode 会报错层级错误。这样的事情怎么办?

编辑:

我想要它的目的或效果是这样的:

我有 UICollectionView 水平滚动。此集合视图的单元格是屏幕页面。在那个屏幕上是标签。 当用户滚动浏览集合视图中的页面时,我希望该标签将滚动到屏幕的左/右边缘并留在那里并随着另一个页面消失。类似于组表视图部分标题,但水平。

【问题讨论】:

为什么要将单元格上的约束添加到集合视图的父视图中?这样做的目的是什么? 好的,我会为此编辑我的问题。 好像需要实现scroll view的delegate scrollViewDidScroll方法,根据scroll view的偏移量调整label的位置。 我的解决方案是添加从标签到主视图的约束 - 左边等于优先级 900,从标签到页面视图的约束 - 右边更多或等于优先级 1000。但我不知道如何设置从标签到主视图的约束 您不能对父视图之外的项目进行约束。由于您所指的标签在您的单元格内,因此您不能对集合视图的父级进行约束。 【参考方案1】:

感谢大家的回答,但对我没有任何帮助。 我所做的是创建 2 个约束:

cell.left equal label.left : priority 499
cell.right greateOrEqual label.right

我在滚动移动时保存了左约束:

- (void) scrollOffsetChange: (CGPoint) offset

    int x = abs(((int)offset.x%(int)self.frame.size.width));
    self.topLableLeftConstraint.constant = x;
    self.topLabels.alpha = 1 - (x/self.frame.size.width)*(x/self.frame.size.width);
    [self layoutIfNeeded];

我什至结束了消失效果。

【讨论】:

【参考方案2】:

与其尝试将这些标签作为单元格的一部分,不如将它们实现为补充视图——它们是UICollectionViewFlowLayout 用于其部分标题和页脚。

您需要实现一些方法来提供视图本身以及它们的布局属性。以下是 Apple 文档中一些相关参考资料的链接:https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/CollectionViewPGforIOS/CreatingCustomLayouts/CreatingCustomLayouts.html#//apple_ref/doc/uid/TP40012334-CH5-SW7

【讨论】:

以上是关于从 UICollectionViewCell 到 ViewController 的自动布局约束的主要内容,如果未能解决你的问题,请参考以下文章

从 UICollectionViewCell 呈现一个 UIPopoverController

将 UICollectionViewCell 加载到 UIView

Swift - 从 UICollectionViewCell 内的视图中删除约束

从 UICollectionViewCell 中点击按钮时,如何引用 UITableViewCell?

解码后如何恢复 UICollectionViewCell 中的绑定

如何找到 UICollectionViewCell 相对于应用程序窗口的坐标