我在我的一个应用程序UICollectionView中使用,具有自定义单元格但具有默认流程。 目前,该视图连续显示3个单元格(所有单元格大小相同)。单元格从左到右填充行,但我需要从右到左。
有可能吗?我是否需要创建自定义流程布局?如果是这样,任何人都可以给出一个简单的例子吗?
任何帮助将不胜感激。
答案 0 :(得分:5)
这是我的解决方案: 创建UICollectionViewFlowLayout的子类并覆盖
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect:
我使用NSLocales字符方向作为RTL转换的触发器。如果它是LTR语言,它只返回默认属性。
希望它有用。
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
NSArray *supersAttributes = [super layoutAttributesForElementsInRect:rect];
NSLocale *currentLocale = ((NSLocale *) [NSLocale currentLocale]);
NSLocaleLanguageDirection direction = [NSLocale characterDirectionForLanguage:currentLocale.localeIdentifier];
// if it's an RTL language: change the frame
if (direction == NSLocaleLanguageDirectionRightToLeft) {
for (UICollectionViewLayoutAttributes *attributes in supersAttributes) {
CGRect frame = attributes.frame;
frame.origin.x = rect.size.width - attributes.frame.size.width - attributes.frame.origin.x;
attributes.frame = frame;
}
}
return supersAttributes;
}
答案 1 :(得分:0)
@implementation CollectionReversedLayout
- (void)reverseLayoutAttributes:(UICollectionViewLayoutAttributes *)attributes {
CGPoint newCenter = attributes.center;
newCenter.x = self.collectionViewContentSize.width - newCenter.x;
attributes.center = newCenter;
return attributes;
}
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
NSArray *s = [super layoutAttributesForElementsInRect:rect];
for (UICollectionViewLayoutAttributes *attributes in s) {
[self reverseLayoutAttributes:attributes];
}
return s;
}
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewLayoutAttributes *s = [super layoutAttributesForItemAtIndexPath:indexPath];
[self reverseLayoutAttributes:s];
return s;
}