从 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?