UICollectionViewLayoutAttributes

父類:NSObject

一個(gè)UICollectionViewLayoutAttributes對象管理著一個(gè)Collection View中給定的一個(gè)Item的布局有關(guān)的屬性。當(dāng)被Collection View要求時(shí)布局對象創(chuàng)建這個(gè)類的實(shí)例。反之,Collection View使用布局信息在它的bounds中放置CellSupplementary View。

一、概述

子類化注意

大多數(shù)情況下,你像這樣使用這個(gè)類。如果你想要使用自定義布局屬性來補(bǔ)充基本的布局屬性,你可以聲明一個(gè)子類,并且定義任何你想要存儲額外的布局?jǐn)?shù)據(jù)的屬性。由于布局屬性對象可能會被Collection View復(fù)制,請確保你的子類遵循NSCopying協(xié)議的方法的實(shí)現(xiàn),以便于恰當(dāng)?shù)膹?fù)制你的自定義屬性到一個(gè)新的你自定義的子類中。除了定義你的子類之外,你的UICollectionReusableView對象需要實(shí)現(xiàn)- (void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes;方法,以便于它們可以布局階段在展示任何自定義屬性。
如果你子類化并且實(shí)現(xiàn)任何自定義布局屬性,你也必須重寫繼承的isEqual:方法來比較你的自定義屬性的值。在iOS 7以及之后的版本中,如果布局屬性沒有被改變那么Collection View就不顯示這些布局屬性。這個(gè)取決于通過isEqual:方法比較新舊兩個(gè)屬性對象是否發(fā)生改變。由于這個(gè)方法的默認(rèn)實(shí)現(xiàn)只會檢查這個(gè)類原本存在的屬性,你必須執(zhí)行你自己的寫的這個(gè)方法來比較你額外添加的屬性。如果你的自定義屬性都是相等的,那么在你的實(shí)現(xiàn)的最后要調(diào)用super并且返回super返回的結(jié)果。

二、內(nèi)容

1. 創(chuàng)建布局屬性

+ (instancetype)layoutAttributesForCellWithIndexPath:(NSIndexPath *)indexPath;

創(chuàng)建并返回一個(gè)表示給定索引值對應(yīng)的Cell的布局屬性對象。
使用這個(gè)方法為Collection View中的一個(gè)Cell創(chuàng)建一個(gè)布局屬性對象。Cell是一個(gè)通過Collection View視圖展現(xiàn)的主要類型。一個(gè)Cell的索引通常包含了一個(gè)Section的索引和一個(gè)Item的索引,這個(gè)索引是這個(gè)Cell的內(nèi)容在Collection View的數(shù)據(jù)源中的位置。

+ (instancetype)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind withIndexPath:(NSIndexPath *)indexPath;

創(chuàng)建并返回一個(gè)表示給定索引值對應(yīng)的Supplementary View的布局屬性對象。
使用這個(gè)方法為Collection View中的一個(gè)Supplementary View創(chuàng)建一個(gè)布局屬性對象。和Cell一樣,Supplementary View當(dāng)前的數(shù)據(jù)是被Collection View數(shù)據(jù)源所管理的。但是和Cell不同的是,Supplementary View通常是為特殊目的而設(shè)計(jì)的。例如,HeaderFooterCell的放置位置不同,是提供給在單個(gè)的Section或者整個(gè)Collection View的。
由你來決定如何使用indexPath參數(shù)來識別一個(gè)給定的Supplementary View。通常,你使用elementKind屬性來確定Supplementary View的類型,然后使用indexPath的信息來識別不同Supplementary View實(shí)例。

+ (instancetype)layoutAttributesForDecorationViewOfKind:(NSString *)decorationViewKind withIndexPath:(NSIndexPath *)indexPath;

創(chuàng)建并返回一個(gè)表示給定索引值對應(yīng)的Decoration View的布局屬性對象。
使用這個(gè)方法為Collection View中的一個(gè)Decoration View創(chuàng)建一個(gè)布局屬性對象。Decoration ViewSupplementary View的一種,但是不會展示被Collection View數(shù)據(jù)源所管理的數(shù)據(jù)。相反,它們大多數(shù)為一個(gè)Section或者整個(gè)Collection View呈現(xiàn)視覺裝飾效果。
由你來決定如何使用indexPath參數(shù)來識別一個(gè)給定的Decoration View。通常,你使用decorationViewKind屬性來確定Decoration View的類型,然后使用indexPath的信息來識別不同Decoration View實(shí)例。

2. Identifying the Referenced Item

@property(nonatomic, strong) NSIndexPath *indexPath;

Collection ViewItem的索引值。
索引包含了一個(gè)Section的索引和一個(gè)Item在這個(gè)Section中的索引。這兩個(gè)值標(biāo)示在Collection View唯一的對應(yīng)的Item的位置。

@property(nonatomic, readonly) UICollectionElementCategory representedElementCategory;

Item的類型。
你可以使用這個(gè)屬性的值來區(qū)分這個(gè)布局屬性是用于一個(gè)Cell還是Supplementary View還是Decoration View。

UICollectionElementCategory

typedef NS_ENUM(NSUInteger, UICollectionElementCategory) {
    UICollectionElementCategoryCell, // Cell
    UICollectionElementCategorySupplementaryView, // Supplementary View
    UICollectionElementCategoryDecorationView // Decoration View
};
@property(nonatomic, readonly) NSString *representedElementKind;

目標(biāo)視圖的布局指定標(biāo)識符。
你可以使用這個(gè)屬性的值來標(biāo)識Supplementary View或者Decoration View相關(guān)聯(lián)的屬性給定的目的。如果representedElementCategory屬性為UICollectionElementCategoryCell,那么這個(gè)屬性為nil

3. 訪問布局屬性

@property (nonatomic) CGRect frame;

Item的矩形邊框。
這個(gè)矩形邊框是測量在給定的Collection View坐標(biāo)系中的點(diǎn)。設(shè)置這個(gè)屬性的值也等于設(shè)置center屬性。

@property (nonatomic) CGRect bounds;

Itembounds。
當(dāng)設(shè)置bounds屬性時(shí),bounds屬性中的origin必須被設(shè)置為(0, 0)。改變bounds屬性也會使用新的bounds中的size來匹配改變size屬性。

@property (nonatomic) CGPoint center;

Item的中心點(diǎn)。
這個(gè)中心點(diǎn)是在給定的Collection View坐標(biāo)系中的點(diǎn)。設(shè)置這個(gè)屬性的值也會更新frame屬性中的origin的值。

@property (nonatomic) CGSize size;

Item的大小。
設(shè)置這個(gè)屬性的值也會更新frame屬性中的size的值。

@property (nonatomic) CATransform3D transform3D;

Item的三維變換。
使用你指定的3D轉(zhuǎn)換的仿射版本賦值給這個(gè)屬性來替換transform屬性的值。

@property (nonatomic) CGAffineTransform transform;

Item的仿射變換。
使用你指定的仿射變換賦值給這個(gè)屬性來替換transform3D屬性的值。

@property (nonatomic) CGFloat alpha;

Item的透明度。
值在0.0(透明)到1.0(不透明)之間。默認(rèn)為1.0。

@property (nonatomic) NSInteger zIndex;

指定Item在z軸上的位置。
這個(gè)屬性被用來確定在布局時(shí)Item的前后順序。大的zIndex值的Item會被顯示在小的zIndex值的Item上面。這個(gè)屬性使用相同的值的Item的順序是不確定的。
這個(gè)屬性的值默認(rèn)為0

@property(nonatomic, getter=isHidden) BOOL hidden;

決定Item是否在當(dāng)前情況下顯示。
這個(gè)屬性的默認(rèn)值為NO。為了優(yōu)化,Collection View可能不會創(chuàng)建這個(gè)屬性設(shè)置為YESItem

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 父類:NSObject UICollectionViewLayout是抽象基類,你可以使用它的子類來生成對coll...
    Shmily落墨閱讀 1,856評論 3 3
  • 本文為大地瓜原創(chuàng),歡迎知識共享,轉(zhuǎn)載請注明出處。雖然你不注明出處我也沒什么精力和你計(jì)較。作者微信號:christg...
    大地瓜123閱讀 571評論 0 0
  • 最近將 UICollectionView 進(jìn)行了一個(gè)全面的學(xué)習(xí)及總結(jié),參考了網(wǎng)上大量的文章,把官方文檔進(jìn)行了大概翻...
    varlarzh閱讀 22,121評論 3 93
  • UICollectionView 在 iOS6 中第一次被引入,也是 UIKit視圖類中的一顆新星。它和 UITa...
    評評分分閱讀 1,715評論 0 10
  • 纖月入秋院,輕暈竹清淺。 黃花殘欲墮,枯藤老自憐。 青絲待霜白,斷夢憶舊顏。 縱然霜降后,情深依無怨!
    逸塵居士閱讀 382評論 0 0

友情鏈接更多精彩內(nèi)容