【发布时间】:2014-11-06 03:32:02
【问题描述】:
我正在尝试仅沿一个轴调整 UICollectionViewCell 的大小而不扭曲其内容。
我已经阅读了涉及 UICollectionViewLayoutAttributes layoutAttributesForItemAtIndexPath 和 layoutAttributesForElementsInRect 的类似问题的答案。我还尝试在 UICollectionViewCell 子类中使用 initWithFrame 和 awakeFromNib。我尝试在这些方法中将 UIViewContentMode 设置为 UIViewContentModeScaleAspectFit 或 UIViewContentModeScaleAspectFill,但这没有任何效果。
到目前为止,当我只沿着一个轴拉伸时,我仍然会得到扭曲的文本。
所以...
我有一个 UICollectionView,其单元格在 xib 中定义。目前该单元格仅包含一个 UILabel。集合视图使用 UICollectionViewFlowLayout 进行一些小的自定义:
self.flowLayout = [[UICollectionViewFlowLayout alloc] init];
[self.flowLayout setMinimumLineSpacing:1.0f];
[self.flowLayout setItemSize:CGSizeMake(self.cellSize.width, self.cellSize.height)];
[self.flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
[self.collectionView setCollectionViewLayout:self.flowLayout];
UICollectionView 嵌入在 UIScrollView 中,并且完全适合滚动视图的尺寸。滚动视图大小在两个方向上都设置为比屏幕大得多。硬编码数字仅用于测试;稍后我会将它们转换为适当的常量。
self.cellSize = CGSizeMake(150.0f, 150.0f);
CGSize scrollViewSize = self.scrollView.contentSize;
scrollViewSize.width = 20 * self.cellSize.width + 20.0f;
scrollViewSize.height = 20 * self.cellSize.height + 20.0f;
self.scrollView.contentSize = scrollViewSize;
self.collectionViewHeightConstraint.constant = self.scrollView.contentSize.height;
self.collectionViewWidthConstraint.constant = self.scrollView.contentSize.width;
结果是一个可以在任何方向滚动的网格。那部分正在工作。
网格需要可以按比例或一次仅沿一个轴进行拉伸。我正在使用以下捏合手势识别器进行单轴缩放(同样,y 的硬编码 1.0 值仅用于测试):
- (IBAction)handlePinchGesture:(UIPinchGestureRecognizer *)recognizer
{
recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, 1.0);
recognizer.scale = 1;
}
当我用捏合手势调整集合视图的大小时,每个单元格中的标签都会拉伸和变形。这是屏幕截图:
(来源:afterburnerimages.com)
我很乐意提供任何其他相关信息,非常感谢所有帮助!
【问题讨论】:
-
不清楚你想要发生什么。如果你只在一个维度上拉伸一个视图,那么它里面的所有东西都会在一维上被拉伸,所以会被扭曲——这只是基本的几何图形,与编程无关。您希望在标签中看到什么文字?
-
我想让标签保持其纵横比,即使单元格的纵横比发生变化。我想到的两个选项是让标签在单元格大小变化时保持相同大小,或者在单元格不变化时让标签按比例拉伸。我希望将标签的视图与单元格的视图分开控制。
标签: ios objective-c uicollectionview uicollectionviewlayout