我的Covid-19锁定项目,或者如何进入自定义UICollectionViewLayout并获得ChatLayout的方法

图片



是的是的。我明白,这是2020年,所有的铁杆IOS开发者在专门编写SwiftUICombine,以及约写的文章UIKit像“无冰”。然而,事实证明2020年与往年不同。根本不是那样。



因此,在三月中旬某个地方全面封锁都柏林后,我开始在寒冷的雨夜里寻找与自己有关的东西。纵容了SwiftUIand Combineand之后,我决定绝对不想成为一名公开的Alpha测试员,尽管我朝着正确的方向迈出了第一步,但我还是决定对其他我感兴趣的事物进行更深入的研究,但始终没有时间弄清楚它。这时,我最近开始工作的WebSummit公司决定更改提供商的聊天记录,我不得不更深入地研究当前的聊天记录实现。



MessageKit UI . MessageKit — swift , , JSQMessagesViewController. JSQMessagesViewController 5 . , , UIKit , , , swift- . , UI JSQMessagesViewController. 2020-.



MessageKit 2020-. JSQMessagesViewController Objective-C Swift IOS 2009 . , .



, issues, , , — .



UIScrollView , , “” . 99% , , . “” (contentOffset) .



. - UICollectionViewFlowLayout. ?



, UICollectionViewLayout UICollectionViewFlowLayout, MessageKit Auto-Layout . , UICollectionViewFlowLayout .



. UICollectionViewLayout . . UICollectionViewLayout.



.



, ,



. UICollectionViewLayout . . .



, , , , , , . 4 .



UICollectionViewLayout 2 :

initialLayoutAttributesForAppearingItem(at itemIndexPath: IndexPath) -> UICollectionViewLayoutAttributes?

finalLayoutAttributesForDisappearingItem(at itemIndexPath: IndexPath) -> UICollectionViewLayoutAttributes?



initialLayoutAttributesForAppearingItem finalLayoutAttributesForDisappearingItem



initialLayoutAttributesForAppearingItem :



When your app inserts new items into the collection view, the collection view calls this method for each item you insert. Because new items are not yet visible in the collection view, the attributes you return represent the item’s starting state. For example, you might return attributes that position the item offscreen or set its initial alpha to 0. The collection view uses the attributes you return as the starting point for any animations. (The end point of the animation is the item’s new location and attributes.) If you return nil, the layout uses the item’s final attributes for both the start point and end point of the animation.

The default implementation of this method returns nil. Subclasses are expected to override this method, as needed, and provide any initial attributes.

, , , . finalLayoutAttributesForDisappearingItem . ,



If you return nil, the layout uses the item’s final attributes for both the start point and end point of the animation.

.



. . , c itemIndexPath? 0. 0 — 1? ? 0 0 2?



, , , . : , , . , IOS 12 IOS 13 . . .



UICollectionViewFlowLayout , ChatLayout, , , , .



UICollectionViewFlowLayout , .



, . / UICollectionViewFlowLayout private API … Apple UIKit. , . , , , . , / UICollectionViewFlowLayout. .



AutoLayout





AutoLayout. . ? ? , ? - -?



UICollectionViewLayout . . , . UICollectionViewFlowLayout , prepare , . , AutoLayout .



, : airbnb/MagazineLayout. . . , initialLayoutAttributesForAppearingItem /finalLayoutAttributesForDisappearingItem , AirBnB.



. , " " — ! , .



: UICollectionViewLayoutAttributes, , initialLayoutAttributesForAppearingItem, invalidationContext(forPreferredLayoutAttributes:, withOriginalAttributes originalAttributes:) frame UICollectionView KVO (Key-Value-Observing) . preferredAttributes, originalAttributes. . .





, , . UIScrollView , , , , , .



, . adjustedContextInsets, , .



, UICollectionViewLayout. , . UICollectionViewLayout targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint) -> CGPoint , UICollectionView : , , , contentOffset , — .



, , , , . , UICollectionViewLayoutInvalidationContext contentOffsetAdjustment, . 2 , proposedContentOffset — , , finalizeCollectionViewUpdates. .



, , AutoLayout . UICollectionView (contentSize) contentOffsetAdjustment , , : contentSizeAdjustment , contentOffset . .



.



private API





, , . . , , rdar://40926834: Self Sizing + Prefetching Bugs AirBnB. , .



rdar://46865293: Cell's autoresizing mask breaks self-sizing. layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? , .



, MagazineLayout UICollectionViewFlowLayout _prepareForCollectionViewUpdates:withDataSourceTranslator: prepareForCollectionViewUpdates. Apple, UIKit. : — UICollectionView prepareForCollectionViewUpdates. .



IOS , UICollectionView .. .. — .



, , . , . , , UIKit . .





, UICollectionView + UICollectionViewLayout . , , — . contentInset, , , — . — . — . ? UICollectionViewFlowLayoutUICollectionView + UICollectionViewLayout , , " ". , -, , : — / ..



?





, , . MessageKit ChatLayout. , MessageKit . .



UIViewController . — . , , . , , / master.



MessageKit. . . Jira .



?



ChatLayout.



, , , preview, . , , - , , , , . .



, . .. . : -. . RouteComposer. , , 2 open-source . , , .



, .





ChatLayout — UI . , UICollectionViewLayout, , . , Extras UIView, , , - .





  • (UICollectionViewCell) UIView (UICollectionReusableView).
  • /// .
  • contentOffset UICollectionView .
  • .
  • UIView-, .


(, -, )



ChatLayout UICollectionViewLayout, :



  • UIViewController UICollectionView. . ,
  • UICollectionViewCell . , .
  • . ChatLayout . , , . , — .
  • . . UICollectionViewDataSource . - DifferenceKit, .
  • ChatLayout . . — contentInsets UICollectionView.
  • ChatLayout . - InputBarAccessoryView ( , MessageKit). .


. . .



哦是的 GIF。(注意癫痫病)














All Articles