父類:NSObject
一個UICollectionViewLayoutAttributes
對象管理著一個Collection View
中給定的一個Item的布局有關(guān)的屬性。當(dāng)被Collection View
要求時布局對象創(chuàng)建這個類的實例纽疟。反之爪喘,Collection View
使用布局信息在它的bounds
中放置Cell和Supplementary View。
一蹈胡、概述
子類化注意
大多數(shù)情況下,你像這樣使用這個類。如果你想要使用自定義布局屬性來補充基本的布局屬性域滥,你可以聲明一個子類,并且定義任何你想要存儲額外的布局數(shù)據(jù)的屬性蜈抓。由于布局屬性對象可能會被Collection View
復(fù)制启绰,請確保你的子類遵循NSCopying
協(xié)議的方法的實現(xiàn),以便于恰當(dāng)?shù)膹?fù)制你的自定義屬性到一個新的你自定義的子類中沟使。除了定義你的子類之外委可,你的UICollectionReusableView
對象需要實現(xiàn)- (void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes;
方法,以便于它們可以布局階段在展示任何自定義屬性腊嗡。
如果你子類化并且實現(xiàn)任何自定義布局屬性着倾,你也必須重寫繼承的isEqual:
方法來比較你的自定義屬性的值拾酝。在iOS 7以及之后的版本中,如果布局屬性沒有被改變那么Collection View
就不顯示這些布局屬性屈呕。這個取決于通過isEqual:
方法比較新舊兩個屬性對象是否發(fā)生改變微宝。由于這個方法的默認實現(xiàn)只會檢查這個類原本存在的屬性,你必須執(zhí)行你自己的寫的這個方法來比較你額外添加的屬性虎眨。如果你的自定義屬性都是相等的蟋软,那么在你的實現(xiàn)的最后要調(diào)用super
并且返回super
返回的結(jié)果。
二嗽桩、內(nèi)容
1. 創(chuàng)建布局屬性
+ (instancetype)layoutAttributesForCellWithIndexPath:(NSIndexPath *)indexPath;
創(chuàng)建并返回一個表示給定索引值對應(yīng)的Cell的布局屬性對象岳守。
使用這個方法為Collection View
中的一個Cell創(chuàng)建一個布局屬性對象。Cell是一個通過Collection View
視圖展現(xiàn)的主要類型碌冶。一個Cell的索引通常包含了一個Section的索引和一個Item的索引湿痢,這個索引是這個Cell的內(nèi)容在Collection View
的數(shù)據(jù)源中的位置。
+ (instancetype)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind withIndexPath:(NSIndexPath *)indexPath;
創(chuàng)建并返回一個表示給定索引值對應(yīng)的Supplementary View的布局屬性對象扑庞。
使用這個方法為Collection View
中的一個Supplementary View創(chuàng)建一個布局屬性對象譬重。和Cell一樣,Supplementary View當(dāng)前的數(shù)據(jù)是被Collection View
數(shù)據(jù)源所管理的罐氨。但是和Cell不同的是臀规,Supplementary View通常是為特殊目的而設(shè)計的。例如栅隐,Header和Footer與Cell的放置位置不同塔嬉,是提供給在單個的Section或者整個Collection View
的。
由你來決定如何使用indexPath
參數(shù)來識別一個給定的Supplementary View租悄。通常谨究,你使用elementKind
屬性來確定Supplementary View的類型,然后使用indexPath
的信息來識別不同Supplementary View實例泣棋。
+ (instancetype)layoutAttributesForDecorationViewOfKind:(NSString *)decorationViewKind withIndexPath:(NSIndexPath *)indexPath;
創(chuàng)建并返回一個表示給定索引值對應(yīng)的Decoration View的布局屬性對象胶哲。
使用這個方法為Collection View
中的一個Decoration View創(chuàng)建一個布局屬性對象。Decoration View是Supplementary View的一種潭辈,但是不會展示被Collection View
數(shù)據(jù)源所管理的數(shù)據(jù)纪吮。相反,它們大多數(shù)為一個Section或者整個Collection View
呈現(xiàn)視覺裝飾效果萎胰。
由你來決定如何使用indexPath
參數(shù)來識別一個給定的Decoration View碾盟。通常,你使用decorationViewKind
屬性來確定Decoration View的類型技竟,然后使用indexPath
的信息來識別不同Decoration View實例冰肴。
2. Identifying the Referenced Item
@property(nonatomic, strong) NSIndexPath *indexPath;
Collection View
中Item的索引值。
索引包含了一個Section的索引和一個Item在這個Section中的索引。這兩個值標示在Collection View
唯一的對應(yīng)的Item的位置熙尉。
@property(nonatomic, readonly) UICollectionElementCategory representedElementCategory;
Item的類型联逻。
你可以使用這個屬性的值來區(qū)分這個布局屬性是用于一個Cell還是Supplementary View還是Decoration View。
UICollectionElementCategory
typedef NS_ENUM(NSUInteger, UICollectionElementCategory) {
UICollectionElementCategoryCell, // Cell
UICollectionElementCategorySupplementaryView, // Supplementary View
UICollectionElementCategoryDecorationView // Decoration View
};
@property(nonatomic, readonly) NSString *representedElementKind;
目標視圖的布局指定標識符检痰。
你可以使用這個屬性的值來標識Supplementary View或者Decoration View相關(guān)聯(lián)的屬性給定的目的包归。如果representedElementCategory
屬性為UICollectionElementCategoryCell
,那么這個屬性為nil
铅歼。
3. 訪問布局屬性
@property (nonatomic) CGRect frame;
Item的矩形邊框公壤。
這個矩形邊框是測量在給定的Collection View
坐標系中的點。設(shè)置這個屬性的值也等于設(shè)置center
屬性椎椰。
@property (nonatomic) CGRect bounds;
Item的bounds
厦幅。
當(dāng)設(shè)置bounds
屬性時,bounds
屬性中的origin
必須被設(shè)置為(0, 0)
慨飘。改變bounds
屬性也會使用新的bounds
中的size
來匹配改變size
屬性确憨。
@property (nonatomic) CGPoint center;
Item的中心點。
這個中心點是在給定的Collection View
坐標系中的點瓤的。設(shè)置這個屬性的值也會更新frame
屬性中的origin
的值休弃。
@property (nonatomic) CGSize size;
Item的大小。
設(shè)置這個屬性的值也會更新frame
屬性中的size
的值圈膏。
@property (nonatomic) CATransform3D transform3D;
Item的三維變換塔猾。
使用你指定的3D轉(zhuǎn)換的仿射版本賦值給這個屬性來替換transform
屬性的值。
@property (nonatomic) CGAffineTransform transform;
Item的仿射變換本辐。
使用你指定的仿射變換賦值給這個屬性來替換transform3D
屬性的值。
@property (nonatomic) CGFloat alpha;
Item的透明度医增。
值在0.0
(透明)到1.0
(不透明)之間慎皱。默認為1.0
。
@property (nonatomic) NSInteger zIndex;
指定Item在z軸上的位置叶骨。
這個屬性被用來確定在布局時Item的前后順序茫多。大的zIndex
值的Item會被顯示在小的zIndex
值的Item上面。這個屬性使用相同的值的Item的順序是不確定的忽刽。
這個屬性的值默認為0
天揖。
@property(nonatomic, getter=isHidden) BOOL hidden;
決定Item是否在當(dāng)前情況下顯示。
這個屬性的默認值為NO
跪帝。為了優(yōu)化今膊,Collection View
可能不會創(chuàng)建這個屬性設(shè)置為YES
的Item。