diff --git a/ChatLayout.podspec b/ChatLayout.podspec index c5aa2b61..6e4943fd 100644 --- a/ChatLayout.podspec +++ b/ChatLayout.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'ChatLayout' - s.version = '2.0.4' + s.version = '2.0.5' s.summary = 'Chat UI Library. It uses custom UICollectionViewLayout to provide you full control over the presentation.' s.swift_version = '5.8' diff --git a/ChatLayout/Classes/Core/CollectionViewChatLayout.swift b/ChatLayout/Classes/Core/CollectionViewChatLayout.swift index a372a762..b974f57c 100644 --- a/ChatLayout/Classes/Core/CollectionViewChatLayout.swift +++ b/ChatLayout/Classes/Core/CollectionViewChatLayout.swift @@ -52,7 +52,7 @@ open class CollectionViewChatLayout: UICollectionViewLayout { } } - /// Default `UIScrollView` behaviour is to keep content offset constant from the top edge. If this flag is set to `true` + /// The default `UIScrollView` behaviour is to keep content offset constant from the top edge. If this flag is set to `true` /// `CollectionViewChatLayout` should try to compensate batch update changes to keep the current content at the bottom of the visible /// part of `UICollectionView`. /// @@ -61,6 +61,11 @@ open class CollectionViewChatLayout: UICollectionViewLayout { /// the animation starts and wont be able to compensate that change too. It should be done manually. public var keepContentOffsetAtBottomOnBatchUpdates: Bool = false + /// The default behavior of UICollectionView is to maintain UICollectionViewCells at the top of the visible rectangle + /// when the content size is smaller than the visible area. By setting the respective flag to true, this behavior can be + /// reversed to achieve the result like in Telegram.. + public var keepContentAtBottomOfVisibleArea: Bool = false + /// Sometimes `UIScrollView` can behave weirdly if there are too many corrections in it's `contentOffset` during the animation. Especially when content size of the `UIScrollView` // is getting smaller first and then expands again as the newly appearing cells sizes are being calculated. That is why `CollectionViewChatLayout` /// tries to process only the elements that are currently visible on the screen. But often it is not needed. This flag allows you to have fine control over this behaviour. diff --git a/ChatLayout/Classes/Core/Model/StateController.swift b/ChatLayout/Classes/Core/Model/StateController.swift index d30b9de1..670ae45c 100644 --- a/ChatLayout/Classes/Core/Model/StateController.swift +++ b/ChatLayout/Classes/Core/Model/StateController.swift @@ -27,6 +27,8 @@ protocol ChatLayoutRepresentation: AnyObject { var keepContentOffsetAtBottomOnBatchUpdates: Bool { get } + var keepContentAtBottomOfVisibleArea: Bool { get } + var processOnlyVisibleItemsOnAnimatedBatchUpdates: Bool { get } func numberOfItems(in section: Int) -> Int @@ -359,6 +361,11 @@ final class StateController { if isFinal { offsetByCompensation(frame: &itemFrame, at: itemPath, for: state, backward: true) } + if layoutRepresentation.keepContentAtBottomOfVisibleArea == true, + !(kind == .header && itemPath.section == 0), + !isLayoutBiggerThanVisibleBounds(at: state, withFullCompensation: false, visibleBounds: visibleBounds) { + itemFrame.offsettingBy(dx: 0, dy: visibleBounds.height.rounded() - contentSize(for: state).height.rounded()) + } return itemFrame } diff --git a/Example/ChatLayout/Chat/View/ChatViewController.swift b/Example/ChatLayout/Chat/View/ChatViewController.swift index a2997bbb..39204086 100644 --- a/Example/ChatLayout/Chat/View/ChatViewController.swift +++ b/Example/ChatLayout/Chat/View/ChatViewController.swift @@ -133,6 +133,7 @@ final class ChatViewController: UIViewController { chatLayout.settings.additionalInsets = UIEdgeInsets(top: 8, left: 5, bottom: 8, right: 5) chatLayout.keepContentOffsetAtBottomOnBatchUpdates = true chatLayout.processOnlyVisibleItemsOnAnimatedBatchUpdates = false + chatLayout.keepContentAtBottomOfVisibleArea = true collectionView = UICollectionView(frame: view.frame, collectionViewLayout: chatLayout) view.addSubview(collectionView) @@ -453,6 +454,10 @@ extension ChatViewController: UICollectionViewDelegate { extension ChatViewController: ChatControllerDelegate { func update(with sections: [Section], requiresIsolatedProcess: Bool) { + // if `chatLayout.keepContentAtBottomOfVisibleArea` is enabled and content size is actually smaller than the visible size - it is better to process each batch update + // in isolation. Example: If you insert a cell animatingly and then reload some cell - the reload animation will appear on top of the insertion animation. + // Basically everytime you see any animation glitches - process batch updates in isolation. + let requiresIsolatedProcess = chatLayout.keepContentAtBottomOfVisibleArea == true && chatLayout.collectionViewContentSize.height < chatLayout.visibleBounds.height ? true : requiresIsolatedProcess processUpdates(with: sections, animated: true, requiresIsolatedProcess: requiresIsolatedProcess) } diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 618d1063..27e256ec 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,10 +1,10 @@ PODS: - - ChatLayout (2.0.3): - - ChatLayout/Ultimate (= 2.0.3) - - ChatLayout/Core (2.0.3) - - ChatLayout/Extras (2.0.3): + - ChatLayout (2.0.5): + - ChatLayout/Ultimate (= 2.0.5) + - ChatLayout/Core (2.0.5) + - ChatLayout/Extras (2.0.5): - ChatLayout/Core - - ChatLayout/Ultimate (2.0.3): + - ChatLayout/Ultimate (2.0.5): - ChatLayout/Core - ChatLayout/Extras - DifferenceKit (1.3.0): @@ -35,7 +35,7 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - ChatLayout: 0e958d11b184b64116eb8b37009e4f1aa5b9385f + ChatLayout: 73e77fd1d5f3ea46dfee7045804d00116395bf04 DifferenceKit: ab185c4d7f9cef8af3fcf593e5b387fb81e999ca FPSCounter: 884afec377de66637808c4f52ecc3b85a404732b InputBarAccessoryView: 1d7b0a672b36e370f01f264b3907ef39d03328e3 diff --git a/Example/Tests/MockCollectionLayout.swift b/Example/Tests/MockCollectionLayout.swift index fc014e84..376e1ef0 100644 --- a/Example/Tests/MockCollectionLayout.swift +++ b/Example/Tests/MockCollectionLayout.swift @@ -44,6 +44,8 @@ class MockCollectionLayout: ChatLayoutRepresentation, ChatLayoutDelegate { let keepContentOffsetAtBottomOnBatchUpdates: Bool = true + let keepContentAtBottomOfVisibleArea: Bool = false + let processOnlyVisibleItemsOnAnimatedBatchUpdates: Bool = true func numberOfItems(in section: Int) -> Int { diff --git a/docs/Classes/CellLayoutContainerView.html b/docs/Classes/CellLayoutContainerView.html index 4ced92d3..2e58d7dd 100644 --- a/docs/Classes/CellLayoutContainerView.html +++ b/docs/Classes/CellLayoutContainerView.html @@ -21,7 +21,7 @@

- ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

@@ -464,7 +464,7 @@

Parameters

diff --git a/docs/Classes/ChatLayoutAttributes.html b/docs/Classes/ChatLayoutAttributes.html index 6c2e4f6e..a896dc76 100644 --- a/docs/Classes/ChatLayoutAttributes.html +++ b/docs/Classes/ChatLayoutAttributes.html @@ -21,7 +21,7 @@

- ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

@@ -450,7 +450,7 @@

Declaration

diff --git a/docs/Classes/ChatLayoutInvalidationContext.html b/docs/Classes/ChatLayoutInvalidationContext.html index 39e96e7d..5b2fb23a 100644 --- a/docs/Classes/ChatLayoutInvalidationContext.html +++ b/docs/Classes/ChatLayoutInvalidationContext.html @@ -21,7 +21,7 @@

- ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

@@ -208,7 +208,7 @@

Declaration

diff --git a/docs/Classes/CollectionViewChatLayout.html b/docs/Classes/CollectionViewChatLayout.html index c751c191..2787b40c 100644 --- a/docs/Classes/CollectionViewChatLayout.html +++ b/docs/Classes/CollectionViewChatLayout.html @@ -21,7 +21,7 @@

- ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

@@ -269,7 +269,7 @@

Declaration

-

Default UIScrollView behaviour is to keep content offset constant from the top edge. If this flag is set to true +

The default UIScrollView behaviour is to keep content offset constant from the top edge. If this flag is set to true CollectionViewChatLayout should try to compensate batch update changes to keep the current content at the bottom of the visible part of UICollectionView.

@@ -289,6 +289,35 @@

Declaration

+
  • + +
    +
    +
    +
    +
    +

    The default behavior of UICollectionView is to maintain UICollectionViewCells at the top of the visible rectangle +when the content size is smaller than the visible area. By setting the respective flag to true, this behavior can be +reversed to achieve the result like in Telegram..

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keepContentAtBottomOfVisibleArea: Bool
    + +
    +
    +
    +
    +
  • @@ -1421,7 +1450,7 @@

    Declaration

    diff --git a/docs/Classes/ContainerCollectionReusableView.html b/docs/Classes/ContainerCollectionReusableView.html index 18e96d7f..f435edcc 100644 --- a/docs/Classes/ContainerCollectionReusableView.html +++ b/docs/Classes/ContainerCollectionReusableView.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -384,7 +384,7 @@

    Parameters

    diff --git a/docs/Classes/ContainerCollectionViewCell.html b/docs/Classes/ContainerCollectionViewCell.html index ec4fcfd9..1aed9b74 100644 --- a/docs/Classes/ContainerCollectionViewCell.html +++ b/docs/Classes/ContainerCollectionViewCell.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -384,7 +384,7 @@

    Parameters

    diff --git a/docs/Classes/EdgeAligningView.html b/docs/Classes/EdgeAligningView.html index b590d86d..fcec7fe4 100644 --- a/docs/Classes/EdgeAligningView.html +++ b/docs/Classes/EdgeAligningView.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -536,7 +536,7 @@

    Declaration

    diff --git a/docs/Classes/EdgeAligningView/Edge.html b/docs/Classes/EdgeAligningView/Edge.html index 6e18367a..d850ed99 100644 --- a/docs/Classes/EdgeAligningView/Edge.html +++ b/docs/Classes/EdgeAligningView/Edge.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -288,7 +288,7 @@

    Declaration

    diff --git a/docs/Classes/ImageMaskedView.html b/docs/Classes/ImageMaskedView.html index 15e5ea13..b3279ee1 100644 --- a/docs/Classes/ImageMaskedView.html +++ b/docs/Classes/ImageMaskedView.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -408,7 +408,7 @@

    Declaration

    diff --git a/docs/Classes/MessageContainerView.html b/docs/Classes/MessageContainerView.html index a0a9a089..2922d449 100644 --- a/docs/Classes/MessageContainerView.html +++ b/docs/Classes/MessageContainerView.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -354,7 +354,7 @@

    Parameters

    diff --git a/docs/Classes/RoundedCornersContainerView.html b/docs/Classes/RoundedCornersContainerView.html index 63ea89a3..165ede7d 100644 --- a/docs/Classes/RoundedCornersContainerView.html +++ b/docs/Classes/RoundedCornersContainerView.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -354,7 +354,7 @@

    Declaration

    diff --git a/docs/Classes/SwappingContainerView.html b/docs/Classes/SwappingContainerView.html index 7c2a14d2..ca889928 100644 --- a/docs/Classes/SwappingContainerView.html +++ b/docs/Classes/SwappingContainerView.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -599,7 +599,7 @@

    Declaration

    diff --git a/docs/Classes/SwappingContainerView/Axis.html b/docs/Classes/SwappingContainerView/Axis.html index 5da8bd1c..dd8ae37a 100644 --- a/docs/Classes/SwappingContainerView/Axis.html +++ b/docs/Classes/SwappingContainerView/Axis.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -234,7 +234,7 @@

    Declaration

    diff --git a/docs/Classes/SwappingContainerView/Distribution.html b/docs/Classes/SwappingContainerView/Distribution.html index 94e6a3d6..b54794f6 100644 --- a/docs/Classes/SwappingContainerView/Distribution.html +++ b/docs/Classes/SwappingContainerView/Distribution.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -234,7 +234,7 @@

    Declaration

    diff --git a/docs/Core.html b/docs/Core.html index 51ec6d08..d8b3e918 100644 --- a/docs/Core.html +++ b/docs/Core.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -473,7 +473,7 @@

    Declaration

    diff --git a/docs/Enums/CellLayoutContainerViewAlignment.html b/docs/Enums/CellLayoutContainerViewAlignment.html index a758ff72..6f812aef 100644 --- a/docs/Enums/CellLayoutContainerViewAlignment.html +++ b/docs/Enums/CellLayoutContainerViewAlignment.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -288,7 +288,7 @@

    Declaration

    diff --git a/docs/Enums/ChatItemAlignment.html b/docs/Enums/ChatItemAlignment.html index 69d78e99..cd19c7a8 100644 --- a/docs/Enums/ChatItemAlignment.html +++ b/docs/Enums/ChatItemAlignment.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -288,7 +288,7 @@

    Declaration

    diff --git a/docs/Enums/ImageMaskedViewTransformation.html b/docs/Enums/ImageMaskedViewTransformation.html index 90105104..ca864102 100644 --- a/docs/Enums/ImageMaskedViewTransformation.html +++ b/docs/Enums/ImageMaskedViewTransformation.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -234,7 +234,7 @@

    Declaration

    diff --git a/docs/Enums/InitialAttributesRequestType.html b/docs/Enums/InitialAttributesRequestType.html index bfcd33e2..122094e2 100644 --- a/docs/Enums/InitialAttributesRequestType.html +++ b/docs/Enums/InitialAttributesRequestType.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -234,7 +234,7 @@

    Declaration

    diff --git a/docs/Enums/ItemKind.html b/docs/Enums/ItemKind.html index 1847ebb7..1f78d726 100644 --- a/docs/Enums/ItemKind.html +++ b/docs/Enums/ItemKind.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -288,7 +288,7 @@

    Declaration

    diff --git a/docs/Enums/ItemSize.html b/docs/Enums/ItemSize.html index e19f6ffd..2acbeb1a 100644 --- a/docs/Enums/ItemSize.html +++ b/docs/Enums/ItemSize.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -344,7 +344,7 @@

    Declaration

    diff --git a/docs/Enums/ItemSize/CaseType.html b/docs/Enums/ItemSize/CaseType.html index a03906f8..ababceaa 100644 --- a/docs/Enums/ItemSize/CaseType.html +++ b/docs/Enums/ItemSize/CaseType.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -261,7 +261,7 @@

    Declaration

    diff --git a/docs/Extras.html b/docs/Extras.html index 354cac5e..20b3f2dc 100644 --- a/docs/Extras.html +++ b/docs/Extras.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -541,7 +541,7 @@

    Declaration

    diff --git a/docs/Other Guides.html b/docs/Other Guides.html index 3c7cf459..100ee4a0 100644 --- a/docs/Other Guides.html +++ b/docs/Other Guides.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -182,7 +182,7 @@

    Other Guides

    diff --git a/docs/Protocols/ChatLayoutDelegate.html b/docs/Protocols/ChatLayoutDelegate.html index cc3c3c8a..4fa03567 100644 --- a/docs/Protocols/ChatLayoutDelegate.html +++ b/docs/Protocols/ChatLayoutDelegate.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -653,7 +653,7 @@

    Declaration

    diff --git a/docs/Protocols/ContainerCollectionViewCellDelegate.html b/docs/Protocols/ContainerCollectionViewCellDelegate.html index a5da0c8f..49491404 100644 --- a/docs/Protocols/ContainerCollectionViewCellDelegate.html +++ b/docs/Protocols/ContainerCollectionViewCellDelegate.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -393,7 +393,7 @@

    Parameters

    diff --git a/docs/Protocols/StaticViewFactory.html b/docs/Protocols/StaticViewFactory.html index 04f050c7..5aaa3a81 100644 --- a/docs/Protocols/StaticViewFactory.html +++ b/docs/Protocols/StaticViewFactory.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -257,7 +257,7 @@

    Return Value

    diff --git a/docs/Structs/ChatLayoutPositionSnapshot.html b/docs/Structs/ChatLayoutPositionSnapshot.html index cb9b3760..d100bf10 100644 --- a/docs/Structs/ChatLayoutPositionSnapshot.html +++ b/docs/Structs/ChatLayoutPositionSnapshot.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -401,7 +401,7 @@

    Parameters

    diff --git a/docs/Structs/ChatLayoutPositionSnapshot/Edge.html b/docs/Structs/ChatLayoutPositionSnapshot/Edge.html index 8bfa9888..3efcef0e 100644 --- a/docs/Structs/ChatLayoutPositionSnapshot/Edge.html +++ b/docs/Structs/ChatLayoutPositionSnapshot/Edge.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -234,7 +234,7 @@

    Declaration

    diff --git a/docs/Structs/ChatLayoutSettings.html b/docs/Structs/ChatLayoutSettings.html index 10de9873..d326fd03 100644 --- a/docs/Structs/ChatLayoutSettings.html +++ b/docs/Structs/ChatLayoutSettings.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -289,7 +289,7 @@

    Declaration

    diff --git a/docs/Structs/VoidViewFactory.html b/docs/Structs/VoidViewFactory.html index d6d63e37..0d0a69e6 100644 --- a/docs/Structs/VoidViewFactory.html +++ b/docs/Structs/VoidViewFactory.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -233,7 +233,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/CellLayoutContainerView.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/CellLayoutContainerView.html index 4ced92d3..2e58d7dd 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/CellLayoutContainerView.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/CellLayoutContainerView.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -464,7 +464,7 @@

    Parameters

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ChatLayoutAttributes.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ChatLayoutAttributes.html index 6c2e4f6e..a896dc76 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ChatLayoutAttributes.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ChatLayoutAttributes.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -450,7 +450,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ChatLayoutInvalidationContext.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ChatLayoutInvalidationContext.html index 39e96e7d..5b2fb23a 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ChatLayoutInvalidationContext.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ChatLayoutInvalidationContext.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -208,7 +208,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/CollectionViewChatLayout.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/CollectionViewChatLayout.html index c751c191..2787b40c 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/CollectionViewChatLayout.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/CollectionViewChatLayout.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -269,7 +269,7 @@

    Declaration

    -

    Default UIScrollView behaviour is to keep content offset constant from the top edge. If this flag is set to true +

    The default UIScrollView behaviour is to keep content offset constant from the top edge. If this flag is set to true CollectionViewChatLayout should try to compensate batch update changes to keep the current content at the bottom of the visible part of UICollectionView.

    @@ -289,6 +289,35 @@

    Declaration

  • +
  • + +
    +
    +
    +
    +
    +

    The default behavior of UICollectionView is to maintain UICollectionViewCells at the top of the visible rectangle +when the content size is smaller than the visible area. By setting the respective flag to true, this behavior can be +reversed to achieve the result like in Telegram..

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var keepContentAtBottomOfVisibleArea: Bool
    + +
    +
    +
    +
    +
  • @@ -1421,7 +1450,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ContainerCollectionReusableView.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ContainerCollectionReusableView.html index 18e96d7f..f435edcc 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ContainerCollectionReusableView.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ContainerCollectionReusableView.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -384,7 +384,7 @@

    Parameters

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ContainerCollectionViewCell.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ContainerCollectionViewCell.html index ec4fcfd9..1aed9b74 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ContainerCollectionViewCell.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ContainerCollectionViewCell.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -384,7 +384,7 @@

    Parameters

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/EdgeAligningView.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/EdgeAligningView.html index b590d86d..fcec7fe4 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/EdgeAligningView.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/EdgeAligningView.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -536,7 +536,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/EdgeAligningView/Edge.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/EdgeAligningView/Edge.html index 6e18367a..d850ed99 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/EdgeAligningView/Edge.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/EdgeAligningView/Edge.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -288,7 +288,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ImageMaskedView.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ImageMaskedView.html index 15e5ea13..b3279ee1 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ImageMaskedView.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/ImageMaskedView.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -408,7 +408,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/MessageContainerView.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/MessageContainerView.html index a0a9a089..2922d449 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/MessageContainerView.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/MessageContainerView.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -354,7 +354,7 @@

    Parameters

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/RoundedCornersContainerView.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/RoundedCornersContainerView.html index 63ea89a3..165ede7d 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/RoundedCornersContainerView.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/RoundedCornersContainerView.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -354,7 +354,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/SwappingContainerView.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/SwappingContainerView.html index 7c2a14d2..ca889928 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/SwappingContainerView.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/SwappingContainerView.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -599,7 +599,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/SwappingContainerView/Axis.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/SwappingContainerView/Axis.html index 5da8bd1c..dd8ae37a 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/SwappingContainerView/Axis.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/SwappingContainerView/Axis.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -234,7 +234,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/SwappingContainerView/Distribution.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/SwappingContainerView/Distribution.html index 94e6a3d6..b54794f6 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/SwappingContainerView/Distribution.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Classes/SwappingContainerView/Distribution.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -234,7 +234,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Core.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Core.html index 51ec6d08..d8b3e918 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Core.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Core.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -473,7 +473,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/CellLayoutContainerViewAlignment.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/CellLayoutContainerViewAlignment.html index a758ff72..6f812aef 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/CellLayoutContainerViewAlignment.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/CellLayoutContainerViewAlignment.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -288,7 +288,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ChatItemAlignment.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ChatItemAlignment.html index 69d78e99..cd19c7a8 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ChatItemAlignment.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ChatItemAlignment.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -288,7 +288,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ImageMaskedViewTransformation.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ImageMaskedViewTransformation.html index 90105104..ca864102 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ImageMaskedViewTransformation.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ImageMaskedViewTransformation.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -234,7 +234,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/InitialAttributesRequestType.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/InitialAttributesRequestType.html index bfcd33e2..122094e2 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/InitialAttributesRequestType.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/InitialAttributesRequestType.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -234,7 +234,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ItemKind.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ItemKind.html index 1847ebb7..1f78d726 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ItemKind.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ItemKind.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -288,7 +288,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ItemSize.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ItemSize.html index e19f6ffd..2acbeb1a 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ItemSize.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ItemSize.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -344,7 +344,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ItemSize/CaseType.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ItemSize/CaseType.html index a03906f8..ababceaa 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ItemSize/CaseType.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Enums/ItemSize/CaseType.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -261,7 +261,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Extras.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Extras.html index 354cac5e..20b3f2dc 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Extras.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Extras.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -541,7 +541,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Other Guides.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Other Guides.html index 3c7cf459..100ee4a0 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Other Guides.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Other Guides.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -182,7 +182,7 @@

    Other Guides

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Protocols/ChatLayoutDelegate.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Protocols/ChatLayoutDelegate.html index cc3c3c8a..4fa03567 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Protocols/ChatLayoutDelegate.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Protocols/ChatLayoutDelegate.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -653,7 +653,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Protocols/ContainerCollectionViewCellDelegate.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Protocols/ContainerCollectionViewCellDelegate.html index a5da0c8f..49491404 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Protocols/ContainerCollectionViewCellDelegate.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Protocols/ContainerCollectionViewCellDelegate.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -393,7 +393,7 @@

    Parameters

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Protocols/StaticViewFactory.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Protocols/StaticViewFactory.html index 04f050c7..5aaa3a81 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Protocols/StaticViewFactory.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Protocols/StaticViewFactory.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -257,7 +257,7 @@

    Return Value

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/ChatLayoutPositionSnapshot.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/ChatLayoutPositionSnapshot.html index cb9b3760..d100bf10 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/ChatLayoutPositionSnapshot.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/ChatLayoutPositionSnapshot.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -401,7 +401,7 @@

    Parameters

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/ChatLayoutPositionSnapshot/Edge.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/ChatLayoutPositionSnapshot/Edge.html index 8bfa9888..3efcef0e 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/ChatLayoutPositionSnapshot/Edge.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/ChatLayoutPositionSnapshot/Edge.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -234,7 +234,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/ChatLayoutSettings.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/ChatLayoutSettings.html index 10de9873..d326fd03 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/ChatLayoutSettings.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/ChatLayoutSettings.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -289,7 +289,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/VoidViewFactory.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/VoidViewFactory.html index d6d63e37..0d0a69e6 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/VoidViewFactory.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/Structs/VoidViewFactory.html @@ -21,7 +21,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -233,7 +233,7 @@

    Declaration

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/index.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/index.html index 35fcbf19..4633c80f 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/index.html @@ -20,7 +20,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -335,7 +335,7 @@

    Author

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/readme.html b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/readme.html index 0b5757b8..c5ce8e15 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/readme.html +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/readme.html @@ -20,7 +20,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -335,7 +335,7 @@

    Author

    diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/search.json b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/search.json index 6ab65f11..1ee807c0 100644 --- a/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/search.json +++ b/docs/docsets/ChatLayout.docset/Contents/Resources/Documents/search.json @@ -1 +1 @@ -{"readme.html":{"name":"README"},"Structs/VoidViewFactory.html#/s:10ChatLayout15VoidViewFactoryV0cD0C":{"name":"VoidView","abstract":"\u003cp\u003eNil view placeholder type.\u003c/p\u003e","parent_name":"VoidViewFactory"},"Structs/VoidViewFactory.html#/s:10ChatLayout17StaticViewFactoryP05buildD06within0D0QzSgSo6CGRectV_tFZ":{"name":"buildView(within:)","parent_name":"VoidViewFactory"},"Protocols/StaticViewFactory.html#/s:10ChatLayout17StaticViewFactoryP0D0Qa":{"name":"View","abstract":"\u003cp\u003eA type of the view to build.\u003c/p\u003e","parent_name":"StaticViewFactory"},"Protocols/StaticViewFactory.html#/s:10ChatLayout17StaticViewFactoryP05buildD06within0D0QzSgSo6CGRectV_tFZ":{"name":"buildView(within:)","abstract":"\u003cp\u003eFactory method that will be called by the corresponding container \u003ccode\u003eUIView\u003c/code\u003e\u003c/p\u003e","parent_name":"StaticViewFactory"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC12cornerRadius14CoreFoundation7CGFloatVSgvp":{"name":"cornerRadius","abstract":"\u003cp\u003eCorner radius. If not provided then the half of the current view height will be used.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC06customF0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC5frameACyxGSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC5coderACyxGSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC14layoutSubviewsyyF":{"name":"layoutSubviews()","abstract":"\u003cp\u003eLays out subviews.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Enums/ImageMaskedViewTransformation.html#/s:10ChatLayout29ImageMaskedViewTransformationO4asIsyA2CmF":{"name":"asIs","abstract":"\u003cp\u003eKeep image as it is.\u003c/p\u003e","parent_name":"ImageMaskedViewTransformation"},"Enums/ImageMaskedViewTransformation.html#/s:10ChatLayout29ImageMaskedViewTransformationO17flippedVerticallyyA2CmF":{"name":"flippedVertically","abstract":"\u003cp\u003eFlip image vertically.\u003c/p\u003e","parent_name":"ImageMaskedViewTransformation"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC07maskingC0So7UIImageCSgvp":{"name":"maskingImage","abstract":"\u003cp\u003eAn Image to be used as a mask for the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC06customE0xvp\"\u003ecustomView\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC18maskTransformationAA0cdeG0Ovp":{"name":"maskTransformation","abstract":"\u003cp\u003eA transformation to apply to the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC07maskingC0So7UIImageCSgvp\"\u003emaskingImage\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC5frameACyxGSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC5coderACyxGSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC5frameSo6CGRectVvp":{"name":"frame","abstract":"\u003cp\u003eThe frame rectangle, which describes the view’s location and size in its superview’s coordinate system.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC6boundsSo6CGRectVvp":{"name":"bounds","abstract":"\u003cp\u003eThe bounds rectangle, which describes the view’s location and size in its own coordinate system.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/SwappingContainerView/Distribution.html#/s:10ChatLayout21SwappingContainerViewC12DistributionO14accessoryFirstyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"accessoryFirst","abstract":"\u003cp\u003eThe \u003ccode\u003eAccessoryView\u003c/code\u003e should be positioned before the \u003ccode\u003eCustomView\u003c/code\u003e.\u003c/p\u003e","parent_name":"Distribution"},"Classes/SwappingContainerView/Distribution.html#/s:10ChatLayout21SwappingContainerViewC12DistributionO13accessoryLastyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"accessoryLast","abstract":"\u003cp\u003eThe \u003ccode\u003eAccessoryView\u003c/code\u003e should be positioned after the \u003ccode\u003eCustomView\u003c/code\u003e.\u003c/p\u003e","parent_name":"Distribution"},"Classes/SwappingContainerView/Axis.html#/s:10ChatLayout21SwappingContainerViewC4AxisO10horizontalyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"horizontal","abstract":"\u003cp\u003eThe constraint applied when laying out the horizontal relationship between views.\u003c/p\u003e","parent_name":"Axis"},"Classes/SwappingContainerView/Axis.html#/s:10ChatLayout21SwappingContainerViewC4AxisO8verticalyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"vertical","abstract":"\u003cp\u003eThe constraint applied when laying out the vertical relationship between views.\u003c/p\u003e","parent_name":"Axis"},"Classes/SwappingContainerView/Axis.html":{"name":"Axis","abstract":"\u003cp\u003eKeys that specify a horizontal or vertical layout constraint between views.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView/Distribution.html":{"name":"Distribution","abstract":"\u003cp\u003eKeys that specify a distribution of the contained views.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC12distributionAC12DistributionOyxq__Gvp":{"name":"distribution","abstract":"\u003cp\u003eThe layout of the arranged subviews along the axis.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC4axisAC4AxisOyxq__Gvp":{"name":"axis","abstract":"\u003cp\u003eThe distribution axis of the contained view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC7spacing14CoreFoundation7CGFloatVvp":{"name":"spacing","abstract":"\u003cp\u003eThe distance in points between the edges of the contained views.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC17preferredPrioritySo08UILayoutG0avp":{"name":"preferredPriority","abstract":"\u003cp\u003ePreferred priority of the internal constraints.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC09accessoryE0q_vp":{"name":"accessoryView","abstract":"\u003cp\u003eContained accessory view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained main view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC5frame4axis12distribution7spacing17preferredPriorityACyxq_GSo6CGRectV_AC4AxisOyxq__GAC12DistributionOyxq__G14CoreFoundation7CGFloatVSo08UILayoutK0atcfc":{"name":"init(frame:axis:distribution:spacing:preferredPriority:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC5frameACyxq_GSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC023requiresConstraintBasedB0SbvpZ":{"name":"requiresConstraintBasedLayout","abstract":"\u003cp\u003eA Boolean value that indicates whether the receiver depends on the constraint-based layout system.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC17updateConstraintsyyF":{"name":"updateConstraints()","abstract":"\u003cp\u003eUpdates constraints for the view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O3topyAEyx_GAGmSo6UIViewCRbzlF":{"name":"top","abstract":"\u003cp\u003eTop edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O7leadingyAEyx_GAGmSo6UIViewCRbzlF":{"name":"leading","abstract":"\u003cp\u003eLeading edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O8trailingyAEyx_GAGmSo6UIViewCRbzlF":{"name":"trailing","abstract":"\u003cp\u003eTrailing edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O6bottomyAEyx_GAGmSo6UIViewCRbzlF":{"name":"bottom","abstract":"\u003cp\u003eBottom edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html":{"name":"Edge","abstract":"\u003cp\u003eRepresents an edge of \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/EdgeAligningView.html\"\u003eEdgeAligningView\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC13flexibleEdgesShyAC0C0Oyx_GGvp":{"name":"flexibleEdges","abstract":"\u003cp\u003eSet of edge constraints to be set as loose.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC17preferredPrioritySo08UILayoutG0avp":{"name":"preferredPriority","abstract":"\u003cp\u003ePreferred priority of the internal constraints.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC4with13flexibleEdges17preferredPriorityACyxGx_ShyAC0C0Oyx_GGSo08UILayoutJ0atcfc":{"name":"init(with:flexibleEdges:preferredPriority:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated \u003ccode\u003eEdgeAligningView\u003c/code\u003e\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC5frameACyxGSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC5frame13flexibleEdges17preferredPriorityACyxGSo6CGRectV_ShyAC0C0Oyx_GGSo08UILayoutJ0atcfc":{"name":"init(frame:flexibleEdges:preferredPriority:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC023requiresConstraintBasedB0SbvpZ":{"name":"requiresConstraintBasedLayout","abstract":"\u003cp\u003eA Boolean value that indicates whether the receiver depends on the constraint-based layout system.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC17updateConstraintsyyF":{"name":"updateConstraints()","abstract":"\u003cp\u003eUpdates constraints for the view.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO4fillyA2CmF":{"name":"fill","abstract":"\u003cp\u003eAlign the top and bottom edges of horizontally stacked items tightly to the container.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO3topyA2CmF":{"name":"top","abstract":"\u003cp\u003eAlign the top edges of horizontally stacked items tightly to the container.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO6centeryA2CmF":{"name":"center","abstract":"\u003cp\u003eCenter items in a horizontal stack vertically.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO6bottomyA2CmF":{"name":"bottom","abstract":"\u003cp\u003eAlign the bottom edges of horizontally stacked items tightly to the container.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC07leadingE00E0QzSgvp":{"name":"leadingView","abstract":"\u003cp\u003eLeading accessory view.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC06customE0q_vp":{"name":"customView","abstract":"\u003cp\u003eMain view.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC08trailingE00E0Qy0_Sgvp":{"name":"trailingView","abstract":"\u003cp\u003eTrailing accessory view.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC9alignmentAA0cbdE9AlignmentOvp":{"name":"alignment","abstract":"\u003cp\u003eAlignment that corresponds to \u003ccode\u003eUIStackView.Alignment\u003c/code\u003e\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC7spacing14CoreFoundation7CGFloatVvp":{"name":"spacing","abstract":"\u003cp\u003eDefault spacing between the views.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC20customLeadingSpacing14CoreFoundation7CGFloatVvp":{"name":"customLeadingSpacing","abstract":"\u003cp\u003eCustom spacing between the leading and main views.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC21customTrailingSpacing14CoreFoundation7CGFloatVvp":{"name":"customTrailingSpacing","abstract":"\u003cp\u003eCustom spacing between the main and trailing views.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC5frameACyxq_q0_GSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC5coderACyxq_q0_GSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC09accessoryE00E0QzSgvp":{"name":"accessoryView","abstract":"\u003cp\u003eAn accessory view.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC06customE0q_vp":{"name":"customView","abstract":"\u003cp\u003eMain view.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC9alignmentAA0A13ItemAlignmentOvp":{"name":"alignment","abstract":"\u003cp\u003eAn alignment of the contained views within the \u003ccode\u003eMessageContainerView\u003c/code\u003e,\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC5frameACyxq_GSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC5coderACyxq_GSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC15reuseIdentifierSSvpZ":{"name":"reuseIdentifier","abstract":"\u003cp\u003eDefault reuse identifier is set with the class name.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC06customF0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC8delegateAA0cdF12CellDelegate_pSgvp":{"name":"delegate","abstract":"\u003cp\u003eAn instance of \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/ContainerCollectionViewCellDelegate.html\"\u003eContainerCollectionViewCellDelegate\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC15prepareForReuseyyF":{"name":"prepareForReuse()","abstract":"\u003cp\u003ePerforms any clean up necessary to prepare the view for use again.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC09preferredB17AttributesFittingySo012UICollectionfbH0CAFF":{"name":"preferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eGives the cell a chance to modify the attributes provided by the layout object.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC5applyyySo012UICollectionfB10AttributesCF":{"name":"apply(_:)","abstract":"\u003cp\u003eApplies the specified layout attributes to the view.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP15prepareForReuseyyF":{"name":"prepareForReuse()","abstract":"\u003cp\u003ePerform any clean up necessary to prepare the view for use again.\u003c/p\u003e","parent_name":"ContainerCollectionViewCellDelegate"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP09preferredB17AttributesFittingyAA0abI0CSgAFF":{"name":"preferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eAllows to override the call of \u003ccode\u003eContainerCollectionViewCell\u003c/code\u003e/\u003ccode\u003eContainerCollectionReusableView\u003c/code\u003e","parent_name":"ContainerCollectionViewCellDelegate"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP015modifyPreferredB17AttributesFittingyyAA0abJ0CF":{"name":"modifyPreferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eAllows to additionally modify \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html\"\u003eChatLayoutAttributes\u003c/a\u003e\u003c/code\u003e after the \u003ccode\u003eUICollectionReusableView.preferredLayoutAttributesFitting(...)\u003c/code\u003e","parent_name":"ContainerCollectionViewCellDelegate"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP5applyyyAA0aB10AttributesCF":{"name":"apply(_:)","abstract":"\u003cp\u003eApply the specified layout attributes to the view.","parent_name":"ContainerCollectionViewCellDelegate"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC15reuseIdentifierSSvpZ":{"name":"reuseIdentifier","abstract":"\u003cp\u003eDefault reuse identifier is set with the class name.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC8delegateAA0cdeF8Delegate_pSgvp":{"name":"delegate","abstract":"\u003cp\u003eAn instance of \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/ContainerCollectionViewCellDelegate.html\"\u003eContainerCollectionViewCellDelegate\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC15prepareForReuseyyF":{"name":"prepareForReuse()","abstract":"\u003cp\u003ePerforms any clean up necessary to prepare the view for use again.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC09preferredB17AttributesFittingySo012UICollectionebH0CAFF":{"name":"preferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eGives the cell a chance to modify the attributes provided by the layout object.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC5applyyySo012UICollectioneB10AttributesCF":{"name":"apply(_:)","abstract":"\u003cp\u003eApplies the specified layout attributes to the view.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html":{"name":"ContainerCollectionViewCell","abstract":"\u003cp\u003eA container \u003ccode\u003eUICollectionViewCell\u003c/code\u003e that constraints its contained view to its margins.\u003c/p\u003e"},"Protocols/ContainerCollectionViewCellDelegate.html":{"name":"ContainerCollectionViewCellDelegate","abstract":"\u003cp\u003eA delegate of \u003ccode\u003eContainerCollectionViewCell\u003c/code\u003e/\u003ccode\u003eContainerCollectionReusableView\u003c/code\u003e should implement this methods if"},"Classes/ContainerCollectionReusableView.html":{"name":"ContainerCollectionReusableView","abstract":"\u003cp\u003eA container \u003ccode\u003eUICollectionReusableView\u003c/code\u003e that constraints its contained view to its margins.\u003c/p\u003e"},"Classes/MessageContainerView.html":{"name":"MessageContainerView","abstract":"\u003cp\u003eA container view that helps to layout the message view and its accessory\u003c/p\u003e"},"Classes/CellLayoutContainerView.html":{"name":"CellLayoutContainerView","abstract":"\u003cp\u003e\u003ccode\u003eCellLayoutContainerView\u003c/code\u003e is a container view that helps to arrange the views in a horizontal cell-alike layout with an optional \u003ccode\u003eLeadingAccessory\u003c/code\u003e first,"},"Enums/CellLayoutContainerViewAlignment.html":{"name":"CellLayoutContainerViewAlignment","abstract":"\u003cp\u003eAlignment for \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CellLayoutContainerView.html\"\u003eCellLayoutContainerView\u003c/a\u003e\u003c/code\u003e that corresponds to \u003ccode\u003eUIStackView.Alignment\u003c/code\u003e\u003c/p\u003e"},"Classes/EdgeAligningView.html":{"name":"EdgeAligningView","abstract":"\u003cp\u003eContainer view that allows its \u003ccode\u003eCustomView\u003c/code\u003e to have lose connection to the margins of the container according to the"},"Classes/SwappingContainerView.html":{"name":"SwappingContainerView","abstract":"\u003cp\u003eThis container view is designed to hold two \u003ccode\u003eUIView\u003c/code\u003e elements and arrange them in a horizontal or vertical axis."},"Classes/ImageMaskedView.html":{"name":"ImageMaskedView","abstract":"\u003cp\u003eA container view that masks its contained view with an image provided.\u003c/p\u003e"},"Enums/ImageMaskedViewTransformation.html":{"name":"ImageMaskedViewTransformation","abstract":"\u003cp\u003eA transformation to apply to the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC07maskingC0So7UIImageCSgvp\"\u003eImageMaskedView.maskingImage\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e"},"Classes/RoundedCornersContainerView.html":{"name":"RoundedCornersContainerView","abstract":"\u003cp\u003eA container view that keeps its \u003ccode\u003eCustomView\u003c/code\u003e masked with the corner radius provided.\u003c/p\u003e"},"Protocols/StaticViewFactory.html":{"name":"StaticViewFactory","abstract":"\u003cp\u003eA factory that creates optional contained \u003ccode\u003eUIView\u003c/code\u003es should conform to this protocol.\u003c/p\u003e"},"Structs/VoidViewFactory.html":{"name":"VoidViewFactory","abstract":"\u003cp\u003eUse this factory to specify that this view should not be build and should be equal to nil within the container.\u003c/p\u003e"},"Enums/InitialAttributesRequestType.html#/s:10ChatLayout28InitialAttributesRequestTypeO7initialyA2CmF":{"name":"initial","abstract":"\u003cp\u003e\u003ccode\u003eUICollectionView\u003c/code\u003e initially asks about the layout of an item.\u003c/p\u003e","parent_name":"InitialAttributesRequestType"},"Enums/InitialAttributesRequestType.html#/s:10ChatLayout28InitialAttributesRequestTypeO12invalidationyA2CmF":{"name":"invalidation","abstract":"\u003cp\u003eAn item is being invalidated.\u003c/p\u003e","parent_name":"InitialAttributesRequestType"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO7leadingyA2CmF":{"name":"leading","abstract":"\u003cp\u003eShould be aligned at the leading edge of the layout. That includes all the additional content offsets.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO6centeryA2CmF":{"name":"center","abstract":"\u003cp\u003eShould be aligned at the center of the layout.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO8trailingyA2CmF":{"name":"trailing","abstract":"\u003cp\u003eShould be aligned at the trailing edge of the layout.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO9fullWidthyA2CmF":{"name":"fullWidth","abstract":"\u003cp\u003eShould be aligned using the full width of the available content width.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ItemSize/CaseType.html#/s:10ChatLayout8ItemSizeO8CaseTypeO4autoyA2EmF":{"name":"auto","abstract":"\u003cp\u003eRepresents \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemSize.html#/s:10ChatLayout8ItemSizeO4autoyA2CmF\"\u003eItemSize.auto\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"CaseType"},"Enums/ItemSize/CaseType.html#/s:10ChatLayout8ItemSizeO8CaseTypeO9estimatedyA2EmF":{"name":"estimated","abstract":"\u003cp\u003eRepresents \u003ccode\u003eItemSize.estimated\u003c/code\u003e\u003c/p\u003e","parent_name":"CaseType"},"Enums/ItemSize/CaseType.html#/s:10ChatLayout8ItemSizeO8CaseTypeO5exactyA2EmF":{"name":"exact","abstract":"\u003cp\u003eRepresents \u003ccode\u003eItemSize.exact\u003c/code\u003e\u003c/p\u003e","parent_name":"CaseType"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO4autoyA2CmF":{"name":"auto","abstract":"\u003cp\u003eItem size should be fully calculated by the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e.","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO9estimatedyACSo6CGSizeVcACmF":{"name":"estimated(_:)","abstract":"\u003cp\u003eItem size should be fully calculated by the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e.","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO5exactyACSo6CGSizeVcACmF":{"name":"exact(_:)","abstract":"\u003cp\u003eItem size should be exactly equal to the value provided.\u003c/p\u003e","parent_name":"ItemSize"},"Enums/ItemSize/CaseType.html":{"name":"CaseType","abstract":"\u003cp\u003eRepresents current item size case type.\u003c/p\u003e","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO8caseTypeAC04CaseF0Ovp":{"name":"caseType","abstract":"\u003cp\u003eReturns current item size case type.\u003c/p\u003e","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"ItemSize"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO6headeryA2CmF":{"name":"header","abstract":"\u003cp\u003eHeader item\u003c/p\u003e","parent_name":"ItemKind"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO4cellyA2CmF":{"name":"cell","abstract":"\u003cp\u003eCell item\u003c/p\u003e","parent_name":"ItemKind"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO6footeryA2CmF":{"name":"footer","abstract":"\u003cp\u003eFooter item\u003c/p\u003e","parent_name":"ItemKind"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO015isSupplementaryC0Sbvp":{"name":"isSupplementaryItem","abstract":"\u003cp\u003eReturns: \u003ccode\u003etrue\u003c/code\u003e if this \u003ccode\u003eItemKind\u003c/code\u003e is equal to \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemKind.html#/s:10ChatLayout8ItemKindO6headeryA2CmF\"\u003eItemKind.header\u003c/a\u003e\u003c/code\u003e or \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemKind.html#/s:10ChatLayout8ItemKindO6footeryA2CmF\"\u003eItemKind.footer\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ItemKind"},"Classes/ChatLayoutInvalidationContext.html#/s:10ChatLayout0aB19InvalidationContextC010invalidateB7MetricsSbvp":{"name":"invalidateLayoutMetrics","abstract":"\u003cp\u003eIndicates whether to recompute the positions and sizes of the items based on the current","parent_name":"ChatLayoutInvalidationContext"},"Structs/ChatLayoutPositionSnapshot/Edge.html#/s:10ChatLayout0aB16PositionSnapshotV4EdgeO3topyA2EmF":{"name":"top","abstract":"\u003cp\u003eTop edge of the \u003ccode\u003eUICollectionView\u003c/code\u003e\u003c/p\u003e","parent_name":"Edge"},"Structs/ChatLayoutPositionSnapshot/Edge.html#/s:10ChatLayout0aB16PositionSnapshotV4EdgeO6bottomyA2EmF":{"name":"bottom","abstract":"\u003cp\u003eBottom edge of the \u003ccode\u003eUICollectionView\u003c/code\u003e\u003c/p\u003e","parent_name":"Edge"},"Structs/ChatLayoutPositionSnapshot/Edge.html":{"name":"Edge","abstract":"\u003cp\u003eRepresents the edge.\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV9indexPath10Foundation05IndexF0Vvp":{"name":"indexPath","abstract":"\u003cp\u003eItem\u0026rsquo;s \u003ccode\u003eIndexPath\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV4kindAA8ItemKindOvp":{"name":"kind","abstract":"\u003cp\u003eKind of item at the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV9indexPath10Foundation05IndexF0Vvp\"\u003eindexPath\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV4edgeAC4EdgeOvp":{"name":"edge","abstract":"\u003cp\u003eThe edge of the offset.\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV6offset14CoreFoundation7CGFloatVvp":{"name":"offset","abstract":"\u003cp\u003eThe offset from the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV4edgeAC4EdgeOvp\"\u003eedge\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV9indexPath4kind4edge6offsetAC10Foundation05IndexF0V_AA8ItemKindOAC4EdgeO04CoreJ07CGFloatVtcfc":{"name":"init(indexPath:kind:edge:offset:)","abstract":"\u003cp\u003eConstructor\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV17estimatedItemSizeSo6CGSizeVSgvp":{"name":"estimatedItemSize","abstract":"\u003cp\u003eEstimated item size for \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e. This value will be used as the initial size of the item and the final size","parent_name":"ChatLayoutSettings"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV16interItemSpacing14CoreFoundation7CGFloatVvp":{"name":"interItemSpacing","abstract":"\u003cp\u003eSpacing between the items in the section.\u003c/p\u003e","parent_name":"ChatLayoutSettings"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV19interSectionSpacing14CoreFoundation7CGFloatVvp":{"name":"interSectionSpacing","abstract":"\u003cp\u003eSpacing between the sections.\u003c/p\u003e","parent_name":"ChatLayoutSettings"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV16additionalInsetsSo06UIEdgeE0Vvp":{"name":"additionalInsets","abstract":"\u003cp\u003eAdditional insets for the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e content.\u003c/p\u003e","parent_name":"ChatLayoutSettings"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC9alignmentAA0A13ItemAlignmentOvp":{"name":"alignment","abstract":"\u003cp\u003eAlignment of the current item. Can be changed within \u003ccode\u003eUICollectionViewCell.preferredLayoutAttributesFitting(...)\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC16interItemSpacing14CoreFoundation7CGFloatVvp":{"name":"interItemSpacing","abstract":"\u003cp\u003eInter item spacing. Can be changed within \u003ccode\u003eUICollectionViewCell.preferredLayoutAttributesFitting(...)\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC16additionalInsetsSo06UIEdgeE0Vvp":{"name":"additionalInsets","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003es additional insets setup using \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutSettings.html\"\u003eChatLayoutSettings\u003c/a\u003e\u003c/code\u003e. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC8viewSizeSo6CGSizeVvp":{"name":"viewSize","abstract":"\u003cp\u003e\u003ccode\u003eUICollectionView\u003c/code\u003es frame size. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC21adjustedContentInsetsSo06UIEdgeF0Vvp":{"name":"adjustedContentInsets","abstract":"\u003cp\u003e\u003ccode\u003eUICollectionView\u003c/code\u003es adjusted content insets. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC17visibleBoundsSizeSo6CGSizeVvp":{"name":"visibleBoundsSize","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003es visible bounds size excluding \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC21adjustedContentInsetsSo06UIEdgeF0Vvp\"\u003eadjustedContentInsets\u003c/a\u003e\u003c/code\u003e. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC11layoutFrameSo6CGRectVvp":{"name":"layoutFrame","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003es visible bounds size excluding \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC21adjustedContentInsetsSo06UIEdgeF0Vvp\"\u003eadjustedContentInsets\u003c/a\u003e\u003c/code\u003e and \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC16additionalInsetsSo06UIEdgeE0Vvp\"\u003eadditionalInsets\u003c/a\u003e\u003c/code\u003e. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/c:@M@ChatLayout@objc(cs)ChatLayoutAttributes(im)copyWithZone:":{"name":"copy(with:)","abstract":"\u003cp\u003eReturns an exact copy of \u003ccode\u003eChatLayoutAttributes\u003c/code\u003e.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/c:@M@ChatLayout@objc(cs)ChatLayoutAttributes(im)isEqual:":{"name":"isEqual(_:)","abstract":"\u003cp\u003eReturns a Boolean value indicating whether two \u003ccode\u003eChatLayoutAttributes\u003c/code\u003e are considered equal.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC4kindAA8ItemKindOvp":{"name":"kind","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemKind.html\"\u003eItemKind\u003c/a\u003e\u003c/code\u003e represented by this attributes object.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP19shouldPresentHeader_2atSbAA014CollectionViewaB0C_SitF":{"name":"shouldPresentHeader(_:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask if it should present the header in the current layout.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP19shouldPresentFooter_2atSbAA014CollectionViewaB0C_SitF":{"name":"shouldPresentFooter(_:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask if it should present the footer in the current layout.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP11sizeForItem_2of2atAA0F4SizeOAA014CollectionViewaB0C_AA0F4KindO10Foundation9IndexPathVtF":{"name":"sizeForItem(_:of:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask what size the item should have.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP16alignmentForItem_2of2atAA0aF9AlignmentOAA014CollectionViewaB0C_AA0F4KindO10Foundation9IndexPathVtF":{"name":"alignmentForItem(_:of:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask what type of alignment the item should have.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP07initialB25AttributesForInsertedItem_2of2at9modifying2onyAA014CollectionViewaB0C_AA0H4KindO10Foundation9IndexPathVAA0abE0CAA07InitialE11RequestTypeOtF":{"name":"initialLayoutAttributesForInsertedItem(_:of:at:modifying:on:)","abstract":"\u003cp\u003eAsks the delegate to modify a layout attributes instance so that it represents the initial visual state of an item","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP05finalB24AttributesForDeletedItem_2of2at9modifyingyAA014CollectionViewaB0C_AA0H4KindO10Foundation9IndexPathVAA0abE0CtF":{"name":"finalLayoutAttributesForDeletedItem(_:of:at:modifying:)","abstract":"\u003cp\u003eAsks the delegate to modify a layout attributes instance so that it represents the final visual state of an item","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP16interItemSpacing_2of5after14CoreFoundation7CGFloatVSgAA014CollectionViewaB0C_AA0E4KindO0J09IndexPathVtF":{"name":"interItemSpacing(_:of:after:)","abstract":"\u003cp\u003eReturns the interval between items. If returns \u003ccode\u003enil\u003c/code\u003e - the value from \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutSettings.html\"\u003eChatLayoutSettings\u003c/a\u003e\u003c/code\u003e will be used.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP19interSectionSpacing_5after14CoreFoundation7CGFloatVSgAA014CollectionViewaB0C_SitF":{"name":"interSectionSpacing(_:after:)","abstract":"\u003cp\u003eReturns the interval between sections. If returns \u003ccode\u003enil\u003c/code\u003e - the value from \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutSettings.html\"\u003eChatLayoutSettings\u003c/a\u003e\u003c/code\u003e will be used.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C8delegateAA0aB8Delegate_pSgvp":{"name":"delegate","abstract":"\u003cp\u003e\u003ccode\u003eCollectionViewChatLayout\u003c/code\u003e delegate.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C8settingsAA0aB8SettingsVvp":{"name":"settings","abstract":"\u003cp\u003eAdditional settings for \u003ccode\u003eCollectionViewChatLayout\u003c/code\u003e.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C39keepContentOffsetAtBottomOnBatchUpdatesSbvp":{"name":"keepContentOffsetAtBottomOnBatchUpdates","abstract":"\u003cp\u003eDefault \u003ccode\u003eUIScrollView\u003c/code\u003e behaviour is to keep content offset constant from the top edge. If this flag is set to \u003ccode\u003etrue\u003c/code\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C45processOnlyVisibleItemsOnAnimatedBatchUpdatesSbvp":{"name":"processOnlyVisibleItemsOnAnimatedBatchUpdates","abstract":"\u003cp\u003etries to process only the elements that are currently visible on the screen. But often it is not needed. This flag allows you to have fine control over this behaviour.","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C29supportSelfSizingInvalidationSbvp":{"name":"supportSelfSizingInvalidation","abstract":"\u003cp\u003eA mode that enables automatic self-sizing invalidation after Auto Layout changes. It\u0026rsquo;s advisable to continue using the reload/reconfigure method, especially when multiple","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C13visibleBoundsSo6CGRectVvp":{"name":"visibleBounds","abstract":"\u003cp\u003eRepresent the currently visible rectangle.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C11layoutFrameSo6CGRectVvp":{"name":"layoutFrame","abstract":"\u003cp\u003eRepresent the rectangle where all the items are aligned.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(py)developmentLayoutDirection":{"name":"developmentLayoutDirection","abstract":"\u003cp\u003eThe direction of the language you used when designing \u003ccode\u003eCollectionViewChatLayout\u003c/code\u003e layout.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(py)flipsHorizontallyInOppositeLayoutDirection":{"name":"flipsHorizontallyInOppositeLayoutDirection","abstract":"\u003cp\u003eA Boolean value that indicates whether the horizontal coordinate system is automatically flipped at appropriate times.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(cpy)layoutAttributesClass":{"name":"layoutAttributesClass","abstract":"\u003cp\u003eCustom layoutAttributesClass is \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html\"\u003eChatLayoutAttributes\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(cpy)invalidationContextClass":{"name":"invalidationContextClass","abstract":"\u003cp\u003eCustom invalidationContextClass is \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutInvalidationContext.html\"\u003eChatLayoutInvalidationContext\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(py)collectionViewContentSize":{"name":"collectionViewContentSize","abstract":"\u003cp\u003eThe width and height of the collection view’s contents.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C16enableIOS15_1FixSbvp":{"name":"enableIOS15_1Fix","abstract":"\u003cp\u003eThere is an issue in IOS 15.1 that proposed content offset is being ignored by the UICollectionView when user is scrolling.","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C027flipsHorizontallyInOppositeB9DirectionACSb_tcfc":{"name":"init(flipsHorizontallyInOppositeLayoutDirection:)","abstract":"\u003cp\u003eDefault constructor.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)initWithCoder:":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C24getContentOffsetSnapshot4fromAA0ab8PositionH0VSgAG4EdgeO_tF":{"name":"getContentOffsetSnapshot(from:)","abstract":"\u003cp\u003eGet current offset of the item closest to the provided edge.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C20restoreContentOffset4withyAA0aB16PositionSnapshotV_tF":{"name":"restoreContentOffset(with:)","abstract":"\u003cp\u003eInvalidates layout of the \u003ccode\u003eUICollectionView\u003c/code\u003e and trying to keep the offset of the item provided in \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutPositionSnapshot.html\"\u003eChatLayoutPositionSnapshot\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C16reconfigureItems2atySay10Foundation9IndexPathVG_tF":{"name":"reconfigureItems(at:)","abstract":"\u003cp\u003eIf you want to use new \u003ccode\u003eUICollectionView.reconfigureItems(..)\u003c/code\u003e api and expect the reconfiguration to happen animated as well\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)prepareLayout":{"name":"prepare()","abstract":"\u003cp\u003eTells the layout object to update the current layout.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)layoutAttributesForElementsInRect:":{"name":"layoutAttributesForElements(in:)","abstract":"\u003cp\u003eRetrieves the layout attributes for all of the cells and views in the specified rectangle.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)layoutAttributesForItemAtIndexPath:":{"name":"layoutAttributesForItem(at:)","abstract":"\u003cp\u003eRetrieves layout information for an item at the specified index path with a corresponding cell.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)layoutAttributesForSupplementaryViewOfKind:atIndexPath:":{"name":"layoutAttributesForSupplementaryView(ofKind:at:)","abstract":"\u003cp\u003eRetrieves the layout attributes for the specified supplementary view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)prepareForAnimatedBoundsChange:":{"name":"prepare(forAnimatedBoundsChange:)","abstract":"\u003cp\u003ePrepares the layout object for animated changes to the view’s bounds or the insertion or deletion of items.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalizeAnimatedBoundsChange":{"name":"finalizeAnimatedBoundsChange()","abstract":"\u003cp\u003eCleans up after any animated changes to the view’s bounds or after the insertion or deletion of items.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)shouldInvalidateLayoutForPreferredLayoutAttributes:withOriginalAttributes:":{"name":"shouldInvalidateLayout(forPreferredLayoutAttributes:withOriginalAttributes:)","abstract":"\u003cp\u003eAsks the layout object if changes to a self-sizing cell require a layout update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidationContextForPreferredLayoutAttributes:withOriginalAttributes:":{"name":"invalidationContext(forPreferredLayoutAttributes:withOriginalAttributes:)","abstract":"\u003cp\u003eRetrieves a context object that identifies the portions of the layout that should change in response to dynamic cell changes.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)shouldInvalidateLayoutForBoundsChange:":{"name":"shouldInvalidateLayout(forBoundsChange:)","abstract":"\u003cp\u003eAsks the layout object if the new bounds require a layout update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidationContextForBoundsChange:":{"name":"invalidationContext(forBoundsChange:)","abstract":"\u003cp\u003eRetrieves a context object that defines the portions of the layout that should change when a bounds change occurs.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidateLayoutWithContext:":{"name":"invalidateLayout(with:)","abstract":"\u003cp\u003eInvalidates the current layout using the information in the provided context object.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidateLayout":{"name":"invalidateLayout()","abstract":"\u003cp\u003eInvalidates the current layout and triggers a layout update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)targetContentOffsetForProposedContentOffset:":{"name":"targetContentOffset(forProposedContentOffset:)","abstract":"\u003cp\u003eRetrieves the content offset to use after an animated layout update or change.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)prepareForCollectionViewUpdates:":{"name":"prepare(forCollectionViewUpdates:)","abstract":"\u003cp\u003eNotifies the layout object that the contents of the collection view are about to change.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalizeCollectionViewUpdates":{"name":"finalizeCollectionViewUpdates()","abstract":"\u003cp\u003ePerforms any additional animations or clean up needed during a collection view update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)initialLayoutAttributesForAppearingItemAtIndexPath:":{"name":"initialLayoutAttributesForAppearingItem(at:)","abstract":"\u003cp\u003eRetrieves the starting layout information for an item being inserted into the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalLayoutAttributesForDisappearingItemAtIndexPath:":{"name":"finalLayoutAttributesForDisappearingItem(at:)","abstract":"\u003cp\u003eRetrieves the final layout information for an item that is about to be removed from the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)initialLayoutAttributesForAppearingSupplementaryElementOfKind:atIndexPath:":{"name":"initialLayoutAttributesForAppearingSupplementaryElement(ofKind:at:)","abstract":"\u003cp\u003eRetrieves the starting layout information for a supplementary view being inserted into the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalLayoutAttributesForDisappearingSupplementaryElementOfKind:atIndexPath:":{"name":"finalLayoutAttributesForDisappearingSupplementaryElement(ofKind:at:)","abstract":"\u003cp\u003eRetrieves the final layout information for a supplementary view that is about to be removed from the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html":{"name":"CollectionViewChatLayout","abstract":"\u003cp\u003eA collection view layout designed to display items in a grid similar to \u003ccode\u003eUITableView\u003c/code\u003e, while aligning them to the"},"Protocols/ChatLayoutDelegate.html":{"name":"ChatLayoutDelegate","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e delegate\u003c/p\u003e"},"Classes/ChatLayoutAttributes.html":{"name":"ChatLayoutAttributes","abstract":"\u003cp\u003eCustom implementation of \u003ccode\u003eUICollectionViewLayoutAttributes\u003c/code\u003e\u003c/p\u003e"},"Structs/ChatLayoutSettings.html":{"name":"ChatLayoutSettings","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e settings.\u003c/p\u003e"},"Structs/ChatLayoutPositionSnapshot.html":{"name":"ChatLayoutPositionSnapshot","abstract":"\u003cp\u003eRepresents content offset position expressed by the specific item and it offset from the top or bottom edge.\u003c/p\u003e"},"Classes/ChatLayoutInvalidationContext.html":{"name":"ChatLayoutInvalidationContext","abstract":"\u003cp\u003eCustom implementation of \u003ccode\u003eUICollectionViewLayoutInvalidationContext\u003c/code\u003e\u003c/p\u003e"},"Enums/ItemKind.html":{"name":"ItemKind","abstract":"\u003cp\u003eType of the item supported by \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e"},"Enums/ItemSize.html":{"name":"ItemSize","abstract":"\u003cp\u003eRepresents desired item size.\u003c/p\u003e"},"Enums/ChatItemAlignment.html":{"name":"ChatItemAlignment","abstract":"\u003cp\u003eRepresent item alignment in collection view layout\u003c/p\u003e"},"Enums/InitialAttributesRequestType.html":{"name":"InitialAttributesRequestType","abstract":"\u003cp\u003eRepresents the point in time when \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e asks about layout attributes modification.\u003c/p\u003e"},"Core.html":{"name":"Core"},"Extras.html":{"name":"Extras"},"Other%20Guides.html":{"name":"Other Guides","abstract":"\u003cp\u003eThe following guides are available globally.\u003c/p\u003e"}} \ No newline at end of file +{"readme.html":{"name":"README"},"Structs/VoidViewFactory.html#/s:10ChatLayout15VoidViewFactoryV0cD0C":{"name":"VoidView","abstract":"\u003cp\u003eNil view placeholder type.\u003c/p\u003e","parent_name":"VoidViewFactory"},"Structs/VoidViewFactory.html#/s:10ChatLayout17StaticViewFactoryP05buildD06within0D0QzSgSo6CGRectV_tFZ":{"name":"buildView(within:)","parent_name":"VoidViewFactory"},"Protocols/StaticViewFactory.html#/s:10ChatLayout17StaticViewFactoryP0D0Qa":{"name":"View","abstract":"\u003cp\u003eA type of the view to build.\u003c/p\u003e","parent_name":"StaticViewFactory"},"Protocols/StaticViewFactory.html#/s:10ChatLayout17StaticViewFactoryP05buildD06within0D0QzSgSo6CGRectV_tFZ":{"name":"buildView(within:)","abstract":"\u003cp\u003eFactory method that will be called by the corresponding container \u003ccode\u003eUIView\u003c/code\u003e\u003c/p\u003e","parent_name":"StaticViewFactory"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC12cornerRadius14CoreFoundation7CGFloatVSgvp":{"name":"cornerRadius","abstract":"\u003cp\u003eCorner radius. If not provided then the half of the current view height will be used.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC06customF0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC5frameACyxGSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC5coderACyxGSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC14layoutSubviewsyyF":{"name":"layoutSubviews()","abstract":"\u003cp\u003eLays out subviews.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Enums/ImageMaskedViewTransformation.html#/s:10ChatLayout29ImageMaskedViewTransformationO4asIsyA2CmF":{"name":"asIs","abstract":"\u003cp\u003eKeep image as it is.\u003c/p\u003e","parent_name":"ImageMaskedViewTransformation"},"Enums/ImageMaskedViewTransformation.html#/s:10ChatLayout29ImageMaskedViewTransformationO17flippedVerticallyyA2CmF":{"name":"flippedVertically","abstract":"\u003cp\u003eFlip image vertically.\u003c/p\u003e","parent_name":"ImageMaskedViewTransformation"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC07maskingC0So7UIImageCSgvp":{"name":"maskingImage","abstract":"\u003cp\u003eAn Image to be used as a mask for the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC06customE0xvp\"\u003ecustomView\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC18maskTransformationAA0cdeG0Ovp":{"name":"maskTransformation","abstract":"\u003cp\u003eA transformation to apply to the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC07maskingC0So7UIImageCSgvp\"\u003emaskingImage\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC5frameACyxGSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC5coderACyxGSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC5frameSo6CGRectVvp":{"name":"frame","abstract":"\u003cp\u003eThe frame rectangle, which describes the view’s location and size in its superview’s coordinate system.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC6boundsSo6CGRectVvp":{"name":"bounds","abstract":"\u003cp\u003eThe bounds rectangle, which describes the view’s location and size in its own coordinate system.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/SwappingContainerView/Distribution.html#/s:10ChatLayout21SwappingContainerViewC12DistributionO14accessoryFirstyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"accessoryFirst","abstract":"\u003cp\u003eThe \u003ccode\u003eAccessoryView\u003c/code\u003e should be positioned before the \u003ccode\u003eCustomView\u003c/code\u003e.\u003c/p\u003e","parent_name":"Distribution"},"Classes/SwappingContainerView/Distribution.html#/s:10ChatLayout21SwappingContainerViewC12DistributionO13accessoryLastyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"accessoryLast","abstract":"\u003cp\u003eThe \u003ccode\u003eAccessoryView\u003c/code\u003e should be positioned after the \u003ccode\u003eCustomView\u003c/code\u003e.\u003c/p\u003e","parent_name":"Distribution"},"Classes/SwappingContainerView/Axis.html#/s:10ChatLayout21SwappingContainerViewC4AxisO10horizontalyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"horizontal","abstract":"\u003cp\u003eThe constraint applied when laying out the horizontal relationship between views.\u003c/p\u003e","parent_name":"Axis"},"Classes/SwappingContainerView/Axis.html#/s:10ChatLayout21SwappingContainerViewC4AxisO8verticalyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"vertical","abstract":"\u003cp\u003eThe constraint applied when laying out the vertical relationship between views.\u003c/p\u003e","parent_name":"Axis"},"Classes/SwappingContainerView/Axis.html":{"name":"Axis","abstract":"\u003cp\u003eKeys that specify a horizontal or vertical layout constraint between views.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView/Distribution.html":{"name":"Distribution","abstract":"\u003cp\u003eKeys that specify a distribution of the contained views.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC12distributionAC12DistributionOyxq__Gvp":{"name":"distribution","abstract":"\u003cp\u003eThe layout of the arranged subviews along the axis.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC4axisAC4AxisOyxq__Gvp":{"name":"axis","abstract":"\u003cp\u003eThe distribution axis of the contained view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC7spacing14CoreFoundation7CGFloatVvp":{"name":"spacing","abstract":"\u003cp\u003eThe distance in points between the edges of the contained views.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC17preferredPrioritySo08UILayoutG0avp":{"name":"preferredPriority","abstract":"\u003cp\u003ePreferred priority of the internal constraints.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC09accessoryE0q_vp":{"name":"accessoryView","abstract":"\u003cp\u003eContained accessory view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained main view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC5frame4axis12distribution7spacing17preferredPriorityACyxq_GSo6CGRectV_AC4AxisOyxq__GAC12DistributionOyxq__G14CoreFoundation7CGFloatVSo08UILayoutK0atcfc":{"name":"init(frame:axis:distribution:spacing:preferredPriority:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC5frameACyxq_GSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC023requiresConstraintBasedB0SbvpZ":{"name":"requiresConstraintBasedLayout","abstract":"\u003cp\u003eA Boolean value that indicates whether the receiver depends on the constraint-based layout system.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC17updateConstraintsyyF":{"name":"updateConstraints()","abstract":"\u003cp\u003eUpdates constraints for the view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O3topyAEyx_GAGmSo6UIViewCRbzlF":{"name":"top","abstract":"\u003cp\u003eTop edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O7leadingyAEyx_GAGmSo6UIViewCRbzlF":{"name":"leading","abstract":"\u003cp\u003eLeading edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O8trailingyAEyx_GAGmSo6UIViewCRbzlF":{"name":"trailing","abstract":"\u003cp\u003eTrailing edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O6bottomyAEyx_GAGmSo6UIViewCRbzlF":{"name":"bottom","abstract":"\u003cp\u003eBottom edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html":{"name":"Edge","abstract":"\u003cp\u003eRepresents an edge of \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/EdgeAligningView.html\"\u003eEdgeAligningView\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC13flexibleEdgesShyAC0C0Oyx_GGvp":{"name":"flexibleEdges","abstract":"\u003cp\u003eSet of edge constraints to be set as loose.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC17preferredPrioritySo08UILayoutG0avp":{"name":"preferredPriority","abstract":"\u003cp\u003ePreferred priority of the internal constraints.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC4with13flexibleEdges17preferredPriorityACyxGx_ShyAC0C0Oyx_GGSo08UILayoutJ0atcfc":{"name":"init(with:flexibleEdges:preferredPriority:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated \u003ccode\u003eEdgeAligningView\u003c/code\u003e\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC5frameACyxGSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC5frame13flexibleEdges17preferredPriorityACyxGSo6CGRectV_ShyAC0C0Oyx_GGSo08UILayoutJ0atcfc":{"name":"init(frame:flexibleEdges:preferredPriority:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC023requiresConstraintBasedB0SbvpZ":{"name":"requiresConstraintBasedLayout","abstract":"\u003cp\u003eA Boolean value that indicates whether the receiver depends on the constraint-based layout system.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC17updateConstraintsyyF":{"name":"updateConstraints()","abstract":"\u003cp\u003eUpdates constraints for the view.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO4fillyA2CmF":{"name":"fill","abstract":"\u003cp\u003eAlign the top and bottom edges of horizontally stacked items tightly to the container.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO3topyA2CmF":{"name":"top","abstract":"\u003cp\u003eAlign the top edges of horizontally stacked items tightly to the container.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO6centeryA2CmF":{"name":"center","abstract":"\u003cp\u003eCenter items in a horizontal stack vertically.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO6bottomyA2CmF":{"name":"bottom","abstract":"\u003cp\u003eAlign the bottom edges of horizontally stacked items tightly to the container.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC07leadingE00E0QzSgvp":{"name":"leadingView","abstract":"\u003cp\u003eLeading accessory view.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC06customE0q_vp":{"name":"customView","abstract":"\u003cp\u003eMain view.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC08trailingE00E0Qy0_Sgvp":{"name":"trailingView","abstract":"\u003cp\u003eTrailing accessory view.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC9alignmentAA0cbdE9AlignmentOvp":{"name":"alignment","abstract":"\u003cp\u003eAlignment that corresponds to \u003ccode\u003eUIStackView.Alignment\u003c/code\u003e\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC7spacing14CoreFoundation7CGFloatVvp":{"name":"spacing","abstract":"\u003cp\u003eDefault spacing between the views.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC20customLeadingSpacing14CoreFoundation7CGFloatVvp":{"name":"customLeadingSpacing","abstract":"\u003cp\u003eCustom spacing between the leading and main views.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC21customTrailingSpacing14CoreFoundation7CGFloatVvp":{"name":"customTrailingSpacing","abstract":"\u003cp\u003eCustom spacing between the main and trailing views.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC5frameACyxq_q0_GSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC5coderACyxq_q0_GSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC09accessoryE00E0QzSgvp":{"name":"accessoryView","abstract":"\u003cp\u003eAn accessory view.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC06customE0q_vp":{"name":"customView","abstract":"\u003cp\u003eMain view.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC9alignmentAA0A13ItemAlignmentOvp":{"name":"alignment","abstract":"\u003cp\u003eAn alignment of the contained views within the \u003ccode\u003eMessageContainerView\u003c/code\u003e,\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC5frameACyxq_GSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC5coderACyxq_GSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC15reuseIdentifierSSvpZ":{"name":"reuseIdentifier","abstract":"\u003cp\u003eDefault reuse identifier is set with the class name.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC06customF0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC8delegateAA0cdF12CellDelegate_pSgvp":{"name":"delegate","abstract":"\u003cp\u003eAn instance of \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/ContainerCollectionViewCellDelegate.html\"\u003eContainerCollectionViewCellDelegate\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC15prepareForReuseyyF":{"name":"prepareForReuse()","abstract":"\u003cp\u003ePerforms any clean up necessary to prepare the view for use again.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC09preferredB17AttributesFittingySo012UICollectionfbH0CAFF":{"name":"preferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eGives the cell a chance to modify the attributes provided by the layout object.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC5applyyySo012UICollectionfB10AttributesCF":{"name":"apply(_:)","abstract":"\u003cp\u003eApplies the specified layout attributes to the view.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP15prepareForReuseyyF":{"name":"prepareForReuse()","abstract":"\u003cp\u003ePerform any clean up necessary to prepare the view for use again.\u003c/p\u003e","parent_name":"ContainerCollectionViewCellDelegate"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP09preferredB17AttributesFittingyAA0abI0CSgAFF":{"name":"preferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eAllows to override the call of \u003ccode\u003eContainerCollectionViewCell\u003c/code\u003e/\u003ccode\u003eContainerCollectionReusableView\u003c/code\u003e","parent_name":"ContainerCollectionViewCellDelegate"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP015modifyPreferredB17AttributesFittingyyAA0abJ0CF":{"name":"modifyPreferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eAllows to additionally modify \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html\"\u003eChatLayoutAttributes\u003c/a\u003e\u003c/code\u003e after the \u003ccode\u003eUICollectionReusableView.preferredLayoutAttributesFitting(...)\u003c/code\u003e","parent_name":"ContainerCollectionViewCellDelegate"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP5applyyyAA0aB10AttributesCF":{"name":"apply(_:)","abstract":"\u003cp\u003eApply the specified layout attributes to the view.","parent_name":"ContainerCollectionViewCellDelegate"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC15reuseIdentifierSSvpZ":{"name":"reuseIdentifier","abstract":"\u003cp\u003eDefault reuse identifier is set with the class name.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC8delegateAA0cdeF8Delegate_pSgvp":{"name":"delegate","abstract":"\u003cp\u003eAn instance of \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/ContainerCollectionViewCellDelegate.html\"\u003eContainerCollectionViewCellDelegate\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC15prepareForReuseyyF":{"name":"prepareForReuse()","abstract":"\u003cp\u003ePerforms any clean up necessary to prepare the view for use again.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC09preferredB17AttributesFittingySo012UICollectionebH0CAFF":{"name":"preferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eGives the cell a chance to modify the attributes provided by the layout object.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC5applyyySo012UICollectioneB10AttributesCF":{"name":"apply(_:)","abstract":"\u003cp\u003eApplies the specified layout attributes to the view.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html":{"name":"ContainerCollectionViewCell","abstract":"\u003cp\u003eA container \u003ccode\u003eUICollectionViewCell\u003c/code\u003e that constraints its contained view to its margins.\u003c/p\u003e"},"Protocols/ContainerCollectionViewCellDelegate.html":{"name":"ContainerCollectionViewCellDelegate","abstract":"\u003cp\u003eA delegate of \u003ccode\u003eContainerCollectionViewCell\u003c/code\u003e/\u003ccode\u003eContainerCollectionReusableView\u003c/code\u003e should implement this methods if"},"Classes/ContainerCollectionReusableView.html":{"name":"ContainerCollectionReusableView","abstract":"\u003cp\u003eA container \u003ccode\u003eUICollectionReusableView\u003c/code\u003e that constraints its contained view to its margins.\u003c/p\u003e"},"Classes/MessageContainerView.html":{"name":"MessageContainerView","abstract":"\u003cp\u003eA container view that helps to layout the message view and its accessory\u003c/p\u003e"},"Classes/CellLayoutContainerView.html":{"name":"CellLayoutContainerView","abstract":"\u003cp\u003e\u003ccode\u003eCellLayoutContainerView\u003c/code\u003e is a container view that helps to arrange the views in a horizontal cell-alike layout with an optional \u003ccode\u003eLeadingAccessory\u003c/code\u003e first,"},"Enums/CellLayoutContainerViewAlignment.html":{"name":"CellLayoutContainerViewAlignment","abstract":"\u003cp\u003eAlignment for \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CellLayoutContainerView.html\"\u003eCellLayoutContainerView\u003c/a\u003e\u003c/code\u003e that corresponds to \u003ccode\u003eUIStackView.Alignment\u003c/code\u003e\u003c/p\u003e"},"Classes/EdgeAligningView.html":{"name":"EdgeAligningView","abstract":"\u003cp\u003eContainer view that allows its \u003ccode\u003eCustomView\u003c/code\u003e to have lose connection to the margins of the container according to the"},"Classes/SwappingContainerView.html":{"name":"SwappingContainerView","abstract":"\u003cp\u003eThis container view is designed to hold two \u003ccode\u003eUIView\u003c/code\u003e elements and arrange them in a horizontal or vertical axis."},"Classes/ImageMaskedView.html":{"name":"ImageMaskedView","abstract":"\u003cp\u003eA container view that masks its contained view with an image provided.\u003c/p\u003e"},"Enums/ImageMaskedViewTransformation.html":{"name":"ImageMaskedViewTransformation","abstract":"\u003cp\u003eA transformation to apply to the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC07maskingC0So7UIImageCSgvp\"\u003eImageMaskedView.maskingImage\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e"},"Classes/RoundedCornersContainerView.html":{"name":"RoundedCornersContainerView","abstract":"\u003cp\u003eA container view that keeps its \u003ccode\u003eCustomView\u003c/code\u003e masked with the corner radius provided.\u003c/p\u003e"},"Protocols/StaticViewFactory.html":{"name":"StaticViewFactory","abstract":"\u003cp\u003eA factory that creates optional contained \u003ccode\u003eUIView\u003c/code\u003es should conform to this protocol.\u003c/p\u003e"},"Structs/VoidViewFactory.html":{"name":"VoidViewFactory","abstract":"\u003cp\u003eUse this factory to specify that this view should not be build and should be equal to nil within the container.\u003c/p\u003e"},"Enums/InitialAttributesRequestType.html#/s:10ChatLayout28InitialAttributesRequestTypeO7initialyA2CmF":{"name":"initial","abstract":"\u003cp\u003e\u003ccode\u003eUICollectionView\u003c/code\u003e initially asks about the layout of an item.\u003c/p\u003e","parent_name":"InitialAttributesRequestType"},"Enums/InitialAttributesRequestType.html#/s:10ChatLayout28InitialAttributesRequestTypeO12invalidationyA2CmF":{"name":"invalidation","abstract":"\u003cp\u003eAn item is being invalidated.\u003c/p\u003e","parent_name":"InitialAttributesRequestType"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO7leadingyA2CmF":{"name":"leading","abstract":"\u003cp\u003eShould be aligned at the leading edge of the layout. That includes all the additional content offsets.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO6centeryA2CmF":{"name":"center","abstract":"\u003cp\u003eShould be aligned at the center of the layout.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO8trailingyA2CmF":{"name":"trailing","abstract":"\u003cp\u003eShould be aligned at the trailing edge of the layout.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO9fullWidthyA2CmF":{"name":"fullWidth","abstract":"\u003cp\u003eShould be aligned using the full width of the available content width.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ItemSize/CaseType.html#/s:10ChatLayout8ItemSizeO8CaseTypeO4autoyA2EmF":{"name":"auto","abstract":"\u003cp\u003eRepresents \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemSize.html#/s:10ChatLayout8ItemSizeO4autoyA2CmF\"\u003eItemSize.auto\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"CaseType"},"Enums/ItemSize/CaseType.html#/s:10ChatLayout8ItemSizeO8CaseTypeO9estimatedyA2EmF":{"name":"estimated","abstract":"\u003cp\u003eRepresents \u003ccode\u003eItemSize.estimated\u003c/code\u003e\u003c/p\u003e","parent_name":"CaseType"},"Enums/ItemSize/CaseType.html#/s:10ChatLayout8ItemSizeO8CaseTypeO5exactyA2EmF":{"name":"exact","abstract":"\u003cp\u003eRepresents \u003ccode\u003eItemSize.exact\u003c/code\u003e\u003c/p\u003e","parent_name":"CaseType"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO4autoyA2CmF":{"name":"auto","abstract":"\u003cp\u003eItem size should be fully calculated by the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e.","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO9estimatedyACSo6CGSizeVcACmF":{"name":"estimated(_:)","abstract":"\u003cp\u003eItem size should be fully calculated by the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e.","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO5exactyACSo6CGSizeVcACmF":{"name":"exact(_:)","abstract":"\u003cp\u003eItem size should be exactly equal to the value provided.\u003c/p\u003e","parent_name":"ItemSize"},"Enums/ItemSize/CaseType.html":{"name":"CaseType","abstract":"\u003cp\u003eRepresents current item size case type.\u003c/p\u003e","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO8caseTypeAC04CaseF0Ovp":{"name":"caseType","abstract":"\u003cp\u003eReturns current item size case type.\u003c/p\u003e","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"ItemSize"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO6headeryA2CmF":{"name":"header","abstract":"\u003cp\u003eHeader item\u003c/p\u003e","parent_name":"ItemKind"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO4cellyA2CmF":{"name":"cell","abstract":"\u003cp\u003eCell item\u003c/p\u003e","parent_name":"ItemKind"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO6footeryA2CmF":{"name":"footer","abstract":"\u003cp\u003eFooter item\u003c/p\u003e","parent_name":"ItemKind"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO015isSupplementaryC0Sbvp":{"name":"isSupplementaryItem","abstract":"\u003cp\u003eReturns: \u003ccode\u003etrue\u003c/code\u003e if this \u003ccode\u003eItemKind\u003c/code\u003e is equal to \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemKind.html#/s:10ChatLayout8ItemKindO6headeryA2CmF\"\u003eItemKind.header\u003c/a\u003e\u003c/code\u003e or \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemKind.html#/s:10ChatLayout8ItemKindO6footeryA2CmF\"\u003eItemKind.footer\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ItemKind"},"Classes/ChatLayoutInvalidationContext.html#/s:10ChatLayout0aB19InvalidationContextC010invalidateB7MetricsSbvp":{"name":"invalidateLayoutMetrics","abstract":"\u003cp\u003eIndicates whether to recompute the positions and sizes of the items based on the current","parent_name":"ChatLayoutInvalidationContext"},"Structs/ChatLayoutPositionSnapshot/Edge.html#/s:10ChatLayout0aB16PositionSnapshotV4EdgeO3topyA2EmF":{"name":"top","abstract":"\u003cp\u003eTop edge of the \u003ccode\u003eUICollectionView\u003c/code\u003e\u003c/p\u003e","parent_name":"Edge"},"Structs/ChatLayoutPositionSnapshot/Edge.html#/s:10ChatLayout0aB16PositionSnapshotV4EdgeO6bottomyA2EmF":{"name":"bottom","abstract":"\u003cp\u003eBottom edge of the \u003ccode\u003eUICollectionView\u003c/code\u003e\u003c/p\u003e","parent_name":"Edge"},"Structs/ChatLayoutPositionSnapshot/Edge.html":{"name":"Edge","abstract":"\u003cp\u003eRepresents the edge.\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV9indexPath10Foundation05IndexF0Vvp":{"name":"indexPath","abstract":"\u003cp\u003eItem\u0026rsquo;s \u003ccode\u003eIndexPath\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV4kindAA8ItemKindOvp":{"name":"kind","abstract":"\u003cp\u003eKind of item at the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV9indexPath10Foundation05IndexF0Vvp\"\u003eindexPath\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV4edgeAC4EdgeOvp":{"name":"edge","abstract":"\u003cp\u003eThe edge of the offset.\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV6offset14CoreFoundation7CGFloatVvp":{"name":"offset","abstract":"\u003cp\u003eThe offset from the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV4edgeAC4EdgeOvp\"\u003eedge\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV9indexPath4kind4edge6offsetAC10Foundation05IndexF0V_AA8ItemKindOAC4EdgeO04CoreJ07CGFloatVtcfc":{"name":"init(indexPath:kind:edge:offset:)","abstract":"\u003cp\u003eConstructor\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV17estimatedItemSizeSo6CGSizeVSgvp":{"name":"estimatedItemSize","abstract":"\u003cp\u003eEstimated item size for \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e. This value will be used as the initial size of the item and the final size","parent_name":"ChatLayoutSettings"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV16interItemSpacing14CoreFoundation7CGFloatVvp":{"name":"interItemSpacing","abstract":"\u003cp\u003eSpacing between the items in the section.\u003c/p\u003e","parent_name":"ChatLayoutSettings"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV19interSectionSpacing14CoreFoundation7CGFloatVvp":{"name":"interSectionSpacing","abstract":"\u003cp\u003eSpacing between the sections.\u003c/p\u003e","parent_name":"ChatLayoutSettings"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV16additionalInsetsSo06UIEdgeE0Vvp":{"name":"additionalInsets","abstract":"\u003cp\u003eAdditional insets for the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e content.\u003c/p\u003e","parent_name":"ChatLayoutSettings"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC9alignmentAA0A13ItemAlignmentOvp":{"name":"alignment","abstract":"\u003cp\u003eAlignment of the current item. Can be changed within \u003ccode\u003eUICollectionViewCell.preferredLayoutAttributesFitting(...)\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC16interItemSpacing14CoreFoundation7CGFloatVvp":{"name":"interItemSpacing","abstract":"\u003cp\u003eInter item spacing. Can be changed within \u003ccode\u003eUICollectionViewCell.preferredLayoutAttributesFitting(...)\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC16additionalInsetsSo06UIEdgeE0Vvp":{"name":"additionalInsets","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003es additional insets setup using \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutSettings.html\"\u003eChatLayoutSettings\u003c/a\u003e\u003c/code\u003e. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC8viewSizeSo6CGSizeVvp":{"name":"viewSize","abstract":"\u003cp\u003e\u003ccode\u003eUICollectionView\u003c/code\u003es frame size. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC21adjustedContentInsetsSo06UIEdgeF0Vvp":{"name":"adjustedContentInsets","abstract":"\u003cp\u003e\u003ccode\u003eUICollectionView\u003c/code\u003es adjusted content insets. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC17visibleBoundsSizeSo6CGSizeVvp":{"name":"visibleBoundsSize","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003es visible bounds size excluding \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC21adjustedContentInsetsSo06UIEdgeF0Vvp\"\u003eadjustedContentInsets\u003c/a\u003e\u003c/code\u003e. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC11layoutFrameSo6CGRectVvp":{"name":"layoutFrame","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003es visible bounds size excluding \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC21adjustedContentInsetsSo06UIEdgeF0Vvp\"\u003eadjustedContentInsets\u003c/a\u003e\u003c/code\u003e and \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC16additionalInsetsSo06UIEdgeE0Vvp\"\u003eadditionalInsets\u003c/a\u003e\u003c/code\u003e. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/c:@M@ChatLayout@objc(cs)ChatLayoutAttributes(im)copyWithZone:":{"name":"copy(with:)","abstract":"\u003cp\u003eReturns an exact copy of \u003ccode\u003eChatLayoutAttributes\u003c/code\u003e.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/c:@M@ChatLayout@objc(cs)ChatLayoutAttributes(im)isEqual:":{"name":"isEqual(_:)","abstract":"\u003cp\u003eReturns a Boolean value indicating whether two \u003ccode\u003eChatLayoutAttributes\u003c/code\u003e are considered equal.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC4kindAA8ItemKindOvp":{"name":"kind","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemKind.html\"\u003eItemKind\u003c/a\u003e\u003c/code\u003e represented by this attributes object.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP19shouldPresentHeader_2atSbAA014CollectionViewaB0C_SitF":{"name":"shouldPresentHeader(_:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask if it should present the header in the current layout.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP19shouldPresentFooter_2atSbAA014CollectionViewaB0C_SitF":{"name":"shouldPresentFooter(_:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask if it should present the footer in the current layout.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP11sizeForItem_2of2atAA0F4SizeOAA014CollectionViewaB0C_AA0F4KindO10Foundation9IndexPathVtF":{"name":"sizeForItem(_:of:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask what size the item should have.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP16alignmentForItem_2of2atAA0aF9AlignmentOAA014CollectionViewaB0C_AA0F4KindO10Foundation9IndexPathVtF":{"name":"alignmentForItem(_:of:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask what type of alignment the item should have.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP07initialB25AttributesForInsertedItem_2of2at9modifying2onyAA014CollectionViewaB0C_AA0H4KindO10Foundation9IndexPathVAA0abE0CAA07InitialE11RequestTypeOtF":{"name":"initialLayoutAttributesForInsertedItem(_:of:at:modifying:on:)","abstract":"\u003cp\u003eAsks the delegate to modify a layout attributes instance so that it represents the initial visual state of an item","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP05finalB24AttributesForDeletedItem_2of2at9modifyingyAA014CollectionViewaB0C_AA0H4KindO10Foundation9IndexPathVAA0abE0CtF":{"name":"finalLayoutAttributesForDeletedItem(_:of:at:modifying:)","abstract":"\u003cp\u003eAsks the delegate to modify a layout attributes instance so that it represents the final visual state of an item","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP16interItemSpacing_2of5after14CoreFoundation7CGFloatVSgAA014CollectionViewaB0C_AA0E4KindO0J09IndexPathVtF":{"name":"interItemSpacing(_:of:after:)","abstract":"\u003cp\u003eReturns the interval between items. If returns \u003ccode\u003enil\u003c/code\u003e - the value from \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutSettings.html\"\u003eChatLayoutSettings\u003c/a\u003e\u003c/code\u003e will be used.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP19interSectionSpacing_5after14CoreFoundation7CGFloatVSgAA014CollectionViewaB0C_SitF":{"name":"interSectionSpacing(_:after:)","abstract":"\u003cp\u003eReturns the interval between sections. If returns \u003ccode\u003enil\u003c/code\u003e - the value from \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutSettings.html\"\u003eChatLayoutSettings\u003c/a\u003e\u003c/code\u003e will be used.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C8delegateAA0aB8Delegate_pSgvp":{"name":"delegate","abstract":"\u003cp\u003e\u003ccode\u003eCollectionViewChatLayout\u003c/code\u003e delegate.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C8settingsAA0aB8SettingsVvp":{"name":"settings","abstract":"\u003cp\u003eAdditional settings for \u003ccode\u003eCollectionViewChatLayout\u003c/code\u003e.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C39keepContentOffsetAtBottomOnBatchUpdatesSbvp":{"name":"keepContentOffsetAtBottomOnBatchUpdates","abstract":"\u003cp\u003eThe default \u003ccode\u003eUIScrollView\u003c/code\u003e behaviour is to keep content offset constant from the top edge. If this flag is set to \u003ccode\u003etrue\u003c/code\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C32keepContentAtBottomOfVisibleAreaSbvp":{"name":"keepContentAtBottomOfVisibleArea","abstract":"\u003cp\u003eThe default behavior of UICollectionView is to maintain UICollectionViewCells at the top of the visible rectangle","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C45processOnlyVisibleItemsOnAnimatedBatchUpdatesSbvp":{"name":"processOnlyVisibleItemsOnAnimatedBatchUpdates","abstract":"\u003cp\u003etries to process only the elements that are currently visible on the screen. But often it is not needed. This flag allows you to have fine control over this behaviour.","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C29supportSelfSizingInvalidationSbvp":{"name":"supportSelfSizingInvalidation","abstract":"\u003cp\u003eA mode that enables automatic self-sizing invalidation after Auto Layout changes. It\u0026rsquo;s advisable to continue using the reload/reconfigure method, especially when multiple","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C13visibleBoundsSo6CGRectVvp":{"name":"visibleBounds","abstract":"\u003cp\u003eRepresent the currently visible rectangle.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C11layoutFrameSo6CGRectVvp":{"name":"layoutFrame","abstract":"\u003cp\u003eRepresent the rectangle where all the items are aligned.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(py)developmentLayoutDirection":{"name":"developmentLayoutDirection","abstract":"\u003cp\u003eThe direction of the language you used when designing \u003ccode\u003eCollectionViewChatLayout\u003c/code\u003e layout.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(py)flipsHorizontallyInOppositeLayoutDirection":{"name":"flipsHorizontallyInOppositeLayoutDirection","abstract":"\u003cp\u003eA Boolean value that indicates whether the horizontal coordinate system is automatically flipped at appropriate times.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(cpy)layoutAttributesClass":{"name":"layoutAttributesClass","abstract":"\u003cp\u003eCustom layoutAttributesClass is \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html\"\u003eChatLayoutAttributes\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(cpy)invalidationContextClass":{"name":"invalidationContextClass","abstract":"\u003cp\u003eCustom invalidationContextClass is \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutInvalidationContext.html\"\u003eChatLayoutInvalidationContext\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(py)collectionViewContentSize":{"name":"collectionViewContentSize","abstract":"\u003cp\u003eThe width and height of the collection view’s contents.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C16enableIOS15_1FixSbvp":{"name":"enableIOS15_1Fix","abstract":"\u003cp\u003eThere is an issue in IOS 15.1 that proposed content offset is being ignored by the UICollectionView when user is scrolling.","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C027flipsHorizontallyInOppositeB9DirectionACSb_tcfc":{"name":"init(flipsHorizontallyInOppositeLayoutDirection:)","abstract":"\u003cp\u003eDefault constructor.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)initWithCoder:":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C24getContentOffsetSnapshot4fromAA0ab8PositionH0VSgAG4EdgeO_tF":{"name":"getContentOffsetSnapshot(from:)","abstract":"\u003cp\u003eGet current offset of the item closest to the provided edge.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C20restoreContentOffset4withyAA0aB16PositionSnapshotV_tF":{"name":"restoreContentOffset(with:)","abstract":"\u003cp\u003eInvalidates layout of the \u003ccode\u003eUICollectionView\u003c/code\u003e and trying to keep the offset of the item provided in \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutPositionSnapshot.html\"\u003eChatLayoutPositionSnapshot\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C16reconfigureItems2atySay10Foundation9IndexPathVG_tF":{"name":"reconfigureItems(at:)","abstract":"\u003cp\u003eIf you want to use new \u003ccode\u003eUICollectionView.reconfigureItems(..)\u003c/code\u003e api and expect the reconfiguration to happen animated as well\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)prepareLayout":{"name":"prepare()","abstract":"\u003cp\u003eTells the layout object to update the current layout.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)layoutAttributesForElementsInRect:":{"name":"layoutAttributesForElements(in:)","abstract":"\u003cp\u003eRetrieves the layout attributes for all of the cells and views in the specified rectangle.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)layoutAttributesForItemAtIndexPath:":{"name":"layoutAttributesForItem(at:)","abstract":"\u003cp\u003eRetrieves layout information for an item at the specified index path with a corresponding cell.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)layoutAttributesForSupplementaryViewOfKind:atIndexPath:":{"name":"layoutAttributesForSupplementaryView(ofKind:at:)","abstract":"\u003cp\u003eRetrieves the layout attributes for the specified supplementary view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)prepareForAnimatedBoundsChange:":{"name":"prepare(forAnimatedBoundsChange:)","abstract":"\u003cp\u003ePrepares the layout object for animated changes to the view’s bounds or the insertion or deletion of items.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalizeAnimatedBoundsChange":{"name":"finalizeAnimatedBoundsChange()","abstract":"\u003cp\u003eCleans up after any animated changes to the view’s bounds or after the insertion or deletion of items.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)shouldInvalidateLayoutForPreferredLayoutAttributes:withOriginalAttributes:":{"name":"shouldInvalidateLayout(forPreferredLayoutAttributes:withOriginalAttributes:)","abstract":"\u003cp\u003eAsks the layout object if changes to a self-sizing cell require a layout update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidationContextForPreferredLayoutAttributes:withOriginalAttributes:":{"name":"invalidationContext(forPreferredLayoutAttributes:withOriginalAttributes:)","abstract":"\u003cp\u003eRetrieves a context object that identifies the portions of the layout that should change in response to dynamic cell changes.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)shouldInvalidateLayoutForBoundsChange:":{"name":"shouldInvalidateLayout(forBoundsChange:)","abstract":"\u003cp\u003eAsks the layout object if the new bounds require a layout update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidationContextForBoundsChange:":{"name":"invalidationContext(forBoundsChange:)","abstract":"\u003cp\u003eRetrieves a context object that defines the portions of the layout that should change when a bounds change occurs.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidateLayoutWithContext:":{"name":"invalidateLayout(with:)","abstract":"\u003cp\u003eInvalidates the current layout using the information in the provided context object.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidateLayout":{"name":"invalidateLayout()","abstract":"\u003cp\u003eInvalidates the current layout and triggers a layout update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)targetContentOffsetForProposedContentOffset:":{"name":"targetContentOffset(forProposedContentOffset:)","abstract":"\u003cp\u003eRetrieves the content offset to use after an animated layout update or change.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)prepareForCollectionViewUpdates:":{"name":"prepare(forCollectionViewUpdates:)","abstract":"\u003cp\u003eNotifies the layout object that the contents of the collection view are about to change.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalizeCollectionViewUpdates":{"name":"finalizeCollectionViewUpdates()","abstract":"\u003cp\u003ePerforms any additional animations or clean up needed during a collection view update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)initialLayoutAttributesForAppearingItemAtIndexPath:":{"name":"initialLayoutAttributesForAppearingItem(at:)","abstract":"\u003cp\u003eRetrieves the starting layout information for an item being inserted into the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalLayoutAttributesForDisappearingItemAtIndexPath:":{"name":"finalLayoutAttributesForDisappearingItem(at:)","abstract":"\u003cp\u003eRetrieves the final layout information for an item that is about to be removed from the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)initialLayoutAttributesForAppearingSupplementaryElementOfKind:atIndexPath:":{"name":"initialLayoutAttributesForAppearingSupplementaryElement(ofKind:at:)","abstract":"\u003cp\u003eRetrieves the starting layout information for a supplementary view being inserted into the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalLayoutAttributesForDisappearingSupplementaryElementOfKind:atIndexPath:":{"name":"finalLayoutAttributesForDisappearingSupplementaryElement(ofKind:at:)","abstract":"\u003cp\u003eRetrieves the final layout information for a supplementary view that is about to be removed from the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html":{"name":"CollectionViewChatLayout","abstract":"\u003cp\u003eA collection view layout designed to display items in a grid similar to \u003ccode\u003eUITableView\u003c/code\u003e, while aligning them to the"},"Protocols/ChatLayoutDelegate.html":{"name":"ChatLayoutDelegate","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e delegate\u003c/p\u003e"},"Classes/ChatLayoutAttributes.html":{"name":"ChatLayoutAttributes","abstract":"\u003cp\u003eCustom implementation of \u003ccode\u003eUICollectionViewLayoutAttributes\u003c/code\u003e\u003c/p\u003e"},"Structs/ChatLayoutSettings.html":{"name":"ChatLayoutSettings","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e settings.\u003c/p\u003e"},"Structs/ChatLayoutPositionSnapshot.html":{"name":"ChatLayoutPositionSnapshot","abstract":"\u003cp\u003eRepresents content offset position expressed by the specific item and it offset from the top or bottom edge.\u003c/p\u003e"},"Classes/ChatLayoutInvalidationContext.html":{"name":"ChatLayoutInvalidationContext","abstract":"\u003cp\u003eCustom implementation of \u003ccode\u003eUICollectionViewLayoutInvalidationContext\u003c/code\u003e\u003c/p\u003e"},"Enums/ItemKind.html":{"name":"ItemKind","abstract":"\u003cp\u003eType of the item supported by \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e"},"Enums/ItemSize.html":{"name":"ItemSize","abstract":"\u003cp\u003eRepresents desired item size.\u003c/p\u003e"},"Enums/ChatItemAlignment.html":{"name":"ChatItemAlignment","abstract":"\u003cp\u003eRepresent item alignment in collection view layout\u003c/p\u003e"},"Enums/InitialAttributesRequestType.html":{"name":"InitialAttributesRequestType","abstract":"\u003cp\u003eRepresents the point in time when \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e asks about layout attributes modification.\u003c/p\u003e"},"Core.html":{"name":"Core"},"Extras.html":{"name":"Extras"},"Other%20Guides.html":{"name":"Other Guides","abstract":"\u003cp\u003eThe following guides are available globally.\u003c/p\u003e"}} \ No newline at end of file diff --git a/docs/docsets/ChatLayout.docset/Contents/Resources/docSet.dsidx b/docs/docsets/ChatLayout.docset/Contents/Resources/docSet.dsidx index a767b6eb..9879b17e 100644 Binary files a/docs/docsets/ChatLayout.docset/Contents/Resources/docSet.dsidx and b/docs/docsets/ChatLayout.docset/Contents/Resources/docSet.dsidx differ diff --git a/docs/docsets/ChatLayout.tgz b/docs/docsets/ChatLayout.tgz index 14657e15..1837864a 100644 Binary files a/docs/docsets/ChatLayout.tgz and b/docs/docsets/ChatLayout.tgz differ diff --git a/docs/index.html b/docs/index.html index 35fcbf19..4633c80f 100644 --- a/docs/index.html +++ b/docs/index.html @@ -20,7 +20,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -335,7 +335,7 @@

    Author

    diff --git a/docs/readme.html b/docs/readme.html index 0b5757b8..c5ce8e15 100644 --- a/docs/readme.html +++ b/docs/readme.html @@ -20,7 +20,7 @@

    - ChatLayout 2.0.4 Docs + ChatLayout 2.0.5 Docs (100% documented)

    @@ -335,7 +335,7 @@

    Author

    diff --git a/docs/search.json b/docs/search.json index 6ab65f11..1ee807c0 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"readme.html":{"name":"README"},"Structs/VoidViewFactory.html#/s:10ChatLayout15VoidViewFactoryV0cD0C":{"name":"VoidView","abstract":"\u003cp\u003eNil view placeholder type.\u003c/p\u003e","parent_name":"VoidViewFactory"},"Structs/VoidViewFactory.html#/s:10ChatLayout17StaticViewFactoryP05buildD06within0D0QzSgSo6CGRectV_tFZ":{"name":"buildView(within:)","parent_name":"VoidViewFactory"},"Protocols/StaticViewFactory.html#/s:10ChatLayout17StaticViewFactoryP0D0Qa":{"name":"View","abstract":"\u003cp\u003eA type of the view to build.\u003c/p\u003e","parent_name":"StaticViewFactory"},"Protocols/StaticViewFactory.html#/s:10ChatLayout17StaticViewFactoryP05buildD06within0D0QzSgSo6CGRectV_tFZ":{"name":"buildView(within:)","abstract":"\u003cp\u003eFactory method that will be called by the corresponding container \u003ccode\u003eUIView\u003c/code\u003e\u003c/p\u003e","parent_name":"StaticViewFactory"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC12cornerRadius14CoreFoundation7CGFloatVSgvp":{"name":"cornerRadius","abstract":"\u003cp\u003eCorner radius. If not provided then the half of the current view height will be used.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC06customF0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC5frameACyxGSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC5coderACyxGSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC14layoutSubviewsyyF":{"name":"layoutSubviews()","abstract":"\u003cp\u003eLays out subviews.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Enums/ImageMaskedViewTransformation.html#/s:10ChatLayout29ImageMaskedViewTransformationO4asIsyA2CmF":{"name":"asIs","abstract":"\u003cp\u003eKeep image as it is.\u003c/p\u003e","parent_name":"ImageMaskedViewTransformation"},"Enums/ImageMaskedViewTransformation.html#/s:10ChatLayout29ImageMaskedViewTransformationO17flippedVerticallyyA2CmF":{"name":"flippedVertically","abstract":"\u003cp\u003eFlip image vertically.\u003c/p\u003e","parent_name":"ImageMaskedViewTransformation"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC07maskingC0So7UIImageCSgvp":{"name":"maskingImage","abstract":"\u003cp\u003eAn Image to be used as a mask for the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC06customE0xvp\"\u003ecustomView\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC18maskTransformationAA0cdeG0Ovp":{"name":"maskTransformation","abstract":"\u003cp\u003eA transformation to apply to the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC07maskingC0So7UIImageCSgvp\"\u003emaskingImage\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC5frameACyxGSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC5coderACyxGSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC5frameSo6CGRectVvp":{"name":"frame","abstract":"\u003cp\u003eThe frame rectangle, which describes the view’s location and size in its superview’s coordinate system.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC6boundsSo6CGRectVvp":{"name":"bounds","abstract":"\u003cp\u003eThe bounds rectangle, which describes the view’s location and size in its own coordinate system.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/SwappingContainerView/Distribution.html#/s:10ChatLayout21SwappingContainerViewC12DistributionO14accessoryFirstyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"accessoryFirst","abstract":"\u003cp\u003eThe \u003ccode\u003eAccessoryView\u003c/code\u003e should be positioned before the \u003ccode\u003eCustomView\u003c/code\u003e.\u003c/p\u003e","parent_name":"Distribution"},"Classes/SwappingContainerView/Distribution.html#/s:10ChatLayout21SwappingContainerViewC12DistributionO13accessoryLastyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"accessoryLast","abstract":"\u003cp\u003eThe \u003ccode\u003eAccessoryView\u003c/code\u003e should be positioned after the \u003ccode\u003eCustomView\u003c/code\u003e.\u003c/p\u003e","parent_name":"Distribution"},"Classes/SwappingContainerView/Axis.html#/s:10ChatLayout21SwappingContainerViewC4AxisO10horizontalyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"horizontal","abstract":"\u003cp\u003eThe constraint applied when laying out the horizontal relationship between views.\u003c/p\u003e","parent_name":"Axis"},"Classes/SwappingContainerView/Axis.html#/s:10ChatLayout21SwappingContainerViewC4AxisO8verticalyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"vertical","abstract":"\u003cp\u003eThe constraint applied when laying out the vertical relationship between views.\u003c/p\u003e","parent_name":"Axis"},"Classes/SwappingContainerView/Axis.html":{"name":"Axis","abstract":"\u003cp\u003eKeys that specify a horizontal or vertical layout constraint between views.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView/Distribution.html":{"name":"Distribution","abstract":"\u003cp\u003eKeys that specify a distribution of the contained views.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC12distributionAC12DistributionOyxq__Gvp":{"name":"distribution","abstract":"\u003cp\u003eThe layout of the arranged subviews along the axis.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC4axisAC4AxisOyxq__Gvp":{"name":"axis","abstract":"\u003cp\u003eThe distribution axis of the contained view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC7spacing14CoreFoundation7CGFloatVvp":{"name":"spacing","abstract":"\u003cp\u003eThe distance in points between the edges of the contained views.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC17preferredPrioritySo08UILayoutG0avp":{"name":"preferredPriority","abstract":"\u003cp\u003ePreferred priority of the internal constraints.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC09accessoryE0q_vp":{"name":"accessoryView","abstract":"\u003cp\u003eContained accessory view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained main view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC5frame4axis12distribution7spacing17preferredPriorityACyxq_GSo6CGRectV_AC4AxisOyxq__GAC12DistributionOyxq__G14CoreFoundation7CGFloatVSo08UILayoutK0atcfc":{"name":"init(frame:axis:distribution:spacing:preferredPriority:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC5frameACyxq_GSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC023requiresConstraintBasedB0SbvpZ":{"name":"requiresConstraintBasedLayout","abstract":"\u003cp\u003eA Boolean value that indicates whether the receiver depends on the constraint-based layout system.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC17updateConstraintsyyF":{"name":"updateConstraints()","abstract":"\u003cp\u003eUpdates constraints for the view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O3topyAEyx_GAGmSo6UIViewCRbzlF":{"name":"top","abstract":"\u003cp\u003eTop edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O7leadingyAEyx_GAGmSo6UIViewCRbzlF":{"name":"leading","abstract":"\u003cp\u003eLeading edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O8trailingyAEyx_GAGmSo6UIViewCRbzlF":{"name":"trailing","abstract":"\u003cp\u003eTrailing edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O6bottomyAEyx_GAGmSo6UIViewCRbzlF":{"name":"bottom","abstract":"\u003cp\u003eBottom edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html":{"name":"Edge","abstract":"\u003cp\u003eRepresents an edge of \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/EdgeAligningView.html\"\u003eEdgeAligningView\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC13flexibleEdgesShyAC0C0Oyx_GGvp":{"name":"flexibleEdges","abstract":"\u003cp\u003eSet of edge constraints to be set as loose.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC17preferredPrioritySo08UILayoutG0avp":{"name":"preferredPriority","abstract":"\u003cp\u003ePreferred priority of the internal constraints.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC4with13flexibleEdges17preferredPriorityACyxGx_ShyAC0C0Oyx_GGSo08UILayoutJ0atcfc":{"name":"init(with:flexibleEdges:preferredPriority:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated \u003ccode\u003eEdgeAligningView\u003c/code\u003e\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC5frameACyxGSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC5frame13flexibleEdges17preferredPriorityACyxGSo6CGRectV_ShyAC0C0Oyx_GGSo08UILayoutJ0atcfc":{"name":"init(frame:flexibleEdges:preferredPriority:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC023requiresConstraintBasedB0SbvpZ":{"name":"requiresConstraintBasedLayout","abstract":"\u003cp\u003eA Boolean value that indicates whether the receiver depends on the constraint-based layout system.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC17updateConstraintsyyF":{"name":"updateConstraints()","abstract":"\u003cp\u003eUpdates constraints for the view.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO4fillyA2CmF":{"name":"fill","abstract":"\u003cp\u003eAlign the top and bottom edges of horizontally stacked items tightly to the container.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO3topyA2CmF":{"name":"top","abstract":"\u003cp\u003eAlign the top edges of horizontally stacked items tightly to the container.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO6centeryA2CmF":{"name":"center","abstract":"\u003cp\u003eCenter items in a horizontal stack vertically.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO6bottomyA2CmF":{"name":"bottom","abstract":"\u003cp\u003eAlign the bottom edges of horizontally stacked items tightly to the container.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC07leadingE00E0QzSgvp":{"name":"leadingView","abstract":"\u003cp\u003eLeading accessory view.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC06customE0q_vp":{"name":"customView","abstract":"\u003cp\u003eMain view.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC08trailingE00E0Qy0_Sgvp":{"name":"trailingView","abstract":"\u003cp\u003eTrailing accessory view.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC9alignmentAA0cbdE9AlignmentOvp":{"name":"alignment","abstract":"\u003cp\u003eAlignment that corresponds to \u003ccode\u003eUIStackView.Alignment\u003c/code\u003e\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC7spacing14CoreFoundation7CGFloatVvp":{"name":"spacing","abstract":"\u003cp\u003eDefault spacing between the views.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC20customLeadingSpacing14CoreFoundation7CGFloatVvp":{"name":"customLeadingSpacing","abstract":"\u003cp\u003eCustom spacing between the leading and main views.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC21customTrailingSpacing14CoreFoundation7CGFloatVvp":{"name":"customTrailingSpacing","abstract":"\u003cp\u003eCustom spacing between the main and trailing views.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC5frameACyxq_q0_GSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC5coderACyxq_q0_GSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC09accessoryE00E0QzSgvp":{"name":"accessoryView","abstract":"\u003cp\u003eAn accessory view.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC06customE0q_vp":{"name":"customView","abstract":"\u003cp\u003eMain view.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC9alignmentAA0A13ItemAlignmentOvp":{"name":"alignment","abstract":"\u003cp\u003eAn alignment of the contained views within the \u003ccode\u003eMessageContainerView\u003c/code\u003e,\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC5frameACyxq_GSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC5coderACyxq_GSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC15reuseIdentifierSSvpZ":{"name":"reuseIdentifier","abstract":"\u003cp\u003eDefault reuse identifier is set with the class name.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC06customF0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC8delegateAA0cdF12CellDelegate_pSgvp":{"name":"delegate","abstract":"\u003cp\u003eAn instance of \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/ContainerCollectionViewCellDelegate.html\"\u003eContainerCollectionViewCellDelegate\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC15prepareForReuseyyF":{"name":"prepareForReuse()","abstract":"\u003cp\u003ePerforms any clean up necessary to prepare the view for use again.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC09preferredB17AttributesFittingySo012UICollectionfbH0CAFF":{"name":"preferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eGives the cell a chance to modify the attributes provided by the layout object.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC5applyyySo012UICollectionfB10AttributesCF":{"name":"apply(_:)","abstract":"\u003cp\u003eApplies the specified layout attributes to the view.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP15prepareForReuseyyF":{"name":"prepareForReuse()","abstract":"\u003cp\u003ePerform any clean up necessary to prepare the view for use again.\u003c/p\u003e","parent_name":"ContainerCollectionViewCellDelegate"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP09preferredB17AttributesFittingyAA0abI0CSgAFF":{"name":"preferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eAllows to override the call of \u003ccode\u003eContainerCollectionViewCell\u003c/code\u003e/\u003ccode\u003eContainerCollectionReusableView\u003c/code\u003e","parent_name":"ContainerCollectionViewCellDelegate"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP015modifyPreferredB17AttributesFittingyyAA0abJ0CF":{"name":"modifyPreferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eAllows to additionally modify \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html\"\u003eChatLayoutAttributes\u003c/a\u003e\u003c/code\u003e after the \u003ccode\u003eUICollectionReusableView.preferredLayoutAttributesFitting(...)\u003c/code\u003e","parent_name":"ContainerCollectionViewCellDelegate"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP5applyyyAA0aB10AttributesCF":{"name":"apply(_:)","abstract":"\u003cp\u003eApply the specified layout attributes to the view.","parent_name":"ContainerCollectionViewCellDelegate"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC15reuseIdentifierSSvpZ":{"name":"reuseIdentifier","abstract":"\u003cp\u003eDefault reuse identifier is set with the class name.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC8delegateAA0cdeF8Delegate_pSgvp":{"name":"delegate","abstract":"\u003cp\u003eAn instance of \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/ContainerCollectionViewCellDelegate.html\"\u003eContainerCollectionViewCellDelegate\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC15prepareForReuseyyF":{"name":"prepareForReuse()","abstract":"\u003cp\u003ePerforms any clean up necessary to prepare the view for use again.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC09preferredB17AttributesFittingySo012UICollectionebH0CAFF":{"name":"preferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eGives the cell a chance to modify the attributes provided by the layout object.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC5applyyySo012UICollectioneB10AttributesCF":{"name":"apply(_:)","abstract":"\u003cp\u003eApplies the specified layout attributes to the view.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html":{"name":"ContainerCollectionViewCell","abstract":"\u003cp\u003eA container \u003ccode\u003eUICollectionViewCell\u003c/code\u003e that constraints its contained view to its margins.\u003c/p\u003e"},"Protocols/ContainerCollectionViewCellDelegate.html":{"name":"ContainerCollectionViewCellDelegate","abstract":"\u003cp\u003eA delegate of \u003ccode\u003eContainerCollectionViewCell\u003c/code\u003e/\u003ccode\u003eContainerCollectionReusableView\u003c/code\u003e should implement this methods if"},"Classes/ContainerCollectionReusableView.html":{"name":"ContainerCollectionReusableView","abstract":"\u003cp\u003eA container \u003ccode\u003eUICollectionReusableView\u003c/code\u003e that constraints its contained view to its margins.\u003c/p\u003e"},"Classes/MessageContainerView.html":{"name":"MessageContainerView","abstract":"\u003cp\u003eA container view that helps to layout the message view and its accessory\u003c/p\u003e"},"Classes/CellLayoutContainerView.html":{"name":"CellLayoutContainerView","abstract":"\u003cp\u003e\u003ccode\u003eCellLayoutContainerView\u003c/code\u003e is a container view that helps to arrange the views in a horizontal cell-alike layout with an optional \u003ccode\u003eLeadingAccessory\u003c/code\u003e first,"},"Enums/CellLayoutContainerViewAlignment.html":{"name":"CellLayoutContainerViewAlignment","abstract":"\u003cp\u003eAlignment for \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CellLayoutContainerView.html\"\u003eCellLayoutContainerView\u003c/a\u003e\u003c/code\u003e that corresponds to \u003ccode\u003eUIStackView.Alignment\u003c/code\u003e\u003c/p\u003e"},"Classes/EdgeAligningView.html":{"name":"EdgeAligningView","abstract":"\u003cp\u003eContainer view that allows its \u003ccode\u003eCustomView\u003c/code\u003e to have lose connection to the margins of the container according to the"},"Classes/SwappingContainerView.html":{"name":"SwappingContainerView","abstract":"\u003cp\u003eThis container view is designed to hold two \u003ccode\u003eUIView\u003c/code\u003e elements and arrange them in a horizontal or vertical axis."},"Classes/ImageMaskedView.html":{"name":"ImageMaskedView","abstract":"\u003cp\u003eA container view that masks its contained view with an image provided.\u003c/p\u003e"},"Enums/ImageMaskedViewTransformation.html":{"name":"ImageMaskedViewTransformation","abstract":"\u003cp\u003eA transformation to apply to the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC07maskingC0So7UIImageCSgvp\"\u003eImageMaskedView.maskingImage\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e"},"Classes/RoundedCornersContainerView.html":{"name":"RoundedCornersContainerView","abstract":"\u003cp\u003eA container view that keeps its \u003ccode\u003eCustomView\u003c/code\u003e masked with the corner radius provided.\u003c/p\u003e"},"Protocols/StaticViewFactory.html":{"name":"StaticViewFactory","abstract":"\u003cp\u003eA factory that creates optional contained \u003ccode\u003eUIView\u003c/code\u003es should conform to this protocol.\u003c/p\u003e"},"Structs/VoidViewFactory.html":{"name":"VoidViewFactory","abstract":"\u003cp\u003eUse this factory to specify that this view should not be build and should be equal to nil within the container.\u003c/p\u003e"},"Enums/InitialAttributesRequestType.html#/s:10ChatLayout28InitialAttributesRequestTypeO7initialyA2CmF":{"name":"initial","abstract":"\u003cp\u003e\u003ccode\u003eUICollectionView\u003c/code\u003e initially asks about the layout of an item.\u003c/p\u003e","parent_name":"InitialAttributesRequestType"},"Enums/InitialAttributesRequestType.html#/s:10ChatLayout28InitialAttributesRequestTypeO12invalidationyA2CmF":{"name":"invalidation","abstract":"\u003cp\u003eAn item is being invalidated.\u003c/p\u003e","parent_name":"InitialAttributesRequestType"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO7leadingyA2CmF":{"name":"leading","abstract":"\u003cp\u003eShould be aligned at the leading edge of the layout. That includes all the additional content offsets.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO6centeryA2CmF":{"name":"center","abstract":"\u003cp\u003eShould be aligned at the center of the layout.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO8trailingyA2CmF":{"name":"trailing","abstract":"\u003cp\u003eShould be aligned at the trailing edge of the layout.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO9fullWidthyA2CmF":{"name":"fullWidth","abstract":"\u003cp\u003eShould be aligned using the full width of the available content width.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ItemSize/CaseType.html#/s:10ChatLayout8ItemSizeO8CaseTypeO4autoyA2EmF":{"name":"auto","abstract":"\u003cp\u003eRepresents \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemSize.html#/s:10ChatLayout8ItemSizeO4autoyA2CmF\"\u003eItemSize.auto\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"CaseType"},"Enums/ItemSize/CaseType.html#/s:10ChatLayout8ItemSizeO8CaseTypeO9estimatedyA2EmF":{"name":"estimated","abstract":"\u003cp\u003eRepresents \u003ccode\u003eItemSize.estimated\u003c/code\u003e\u003c/p\u003e","parent_name":"CaseType"},"Enums/ItemSize/CaseType.html#/s:10ChatLayout8ItemSizeO8CaseTypeO5exactyA2EmF":{"name":"exact","abstract":"\u003cp\u003eRepresents \u003ccode\u003eItemSize.exact\u003c/code\u003e\u003c/p\u003e","parent_name":"CaseType"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO4autoyA2CmF":{"name":"auto","abstract":"\u003cp\u003eItem size should be fully calculated by the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e.","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO9estimatedyACSo6CGSizeVcACmF":{"name":"estimated(_:)","abstract":"\u003cp\u003eItem size should be fully calculated by the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e.","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO5exactyACSo6CGSizeVcACmF":{"name":"exact(_:)","abstract":"\u003cp\u003eItem size should be exactly equal to the value provided.\u003c/p\u003e","parent_name":"ItemSize"},"Enums/ItemSize/CaseType.html":{"name":"CaseType","abstract":"\u003cp\u003eRepresents current item size case type.\u003c/p\u003e","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO8caseTypeAC04CaseF0Ovp":{"name":"caseType","abstract":"\u003cp\u003eReturns current item size case type.\u003c/p\u003e","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"ItemSize"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO6headeryA2CmF":{"name":"header","abstract":"\u003cp\u003eHeader item\u003c/p\u003e","parent_name":"ItemKind"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO4cellyA2CmF":{"name":"cell","abstract":"\u003cp\u003eCell item\u003c/p\u003e","parent_name":"ItemKind"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO6footeryA2CmF":{"name":"footer","abstract":"\u003cp\u003eFooter item\u003c/p\u003e","parent_name":"ItemKind"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO015isSupplementaryC0Sbvp":{"name":"isSupplementaryItem","abstract":"\u003cp\u003eReturns: \u003ccode\u003etrue\u003c/code\u003e if this \u003ccode\u003eItemKind\u003c/code\u003e is equal to \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemKind.html#/s:10ChatLayout8ItemKindO6headeryA2CmF\"\u003eItemKind.header\u003c/a\u003e\u003c/code\u003e or \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemKind.html#/s:10ChatLayout8ItemKindO6footeryA2CmF\"\u003eItemKind.footer\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ItemKind"},"Classes/ChatLayoutInvalidationContext.html#/s:10ChatLayout0aB19InvalidationContextC010invalidateB7MetricsSbvp":{"name":"invalidateLayoutMetrics","abstract":"\u003cp\u003eIndicates whether to recompute the positions and sizes of the items based on the current","parent_name":"ChatLayoutInvalidationContext"},"Structs/ChatLayoutPositionSnapshot/Edge.html#/s:10ChatLayout0aB16PositionSnapshotV4EdgeO3topyA2EmF":{"name":"top","abstract":"\u003cp\u003eTop edge of the \u003ccode\u003eUICollectionView\u003c/code\u003e\u003c/p\u003e","parent_name":"Edge"},"Structs/ChatLayoutPositionSnapshot/Edge.html#/s:10ChatLayout0aB16PositionSnapshotV4EdgeO6bottomyA2EmF":{"name":"bottom","abstract":"\u003cp\u003eBottom edge of the \u003ccode\u003eUICollectionView\u003c/code\u003e\u003c/p\u003e","parent_name":"Edge"},"Structs/ChatLayoutPositionSnapshot/Edge.html":{"name":"Edge","abstract":"\u003cp\u003eRepresents the edge.\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV9indexPath10Foundation05IndexF0Vvp":{"name":"indexPath","abstract":"\u003cp\u003eItem\u0026rsquo;s \u003ccode\u003eIndexPath\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV4kindAA8ItemKindOvp":{"name":"kind","abstract":"\u003cp\u003eKind of item at the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV9indexPath10Foundation05IndexF0Vvp\"\u003eindexPath\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV4edgeAC4EdgeOvp":{"name":"edge","abstract":"\u003cp\u003eThe edge of the offset.\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV6offset14CoreFoundation7CGFloatVvp":{"name":"offset","abstract":"\u003cp\u003eThe offset from the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV4edgeAC4EdgeOvp\"\u003eedge\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV9indexPath4kind4edge6offsetAC10Foundation05IndexF0V_AA8ItemKindOAC4EdgeO04CoreJ07CGFloatVtcfc":{"name":"init(indexPath:kind:edge:offset:)","abstract":"\u003cp\u003eConstructor\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV17estimatedItemSizeSo6CGSizeVSgvp":{"name":"estimatedItemSize","abstract":"\u003cp\u003eEstimated item size for \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e. This value will be used as the initial size of the item and the final size","parent_name":"ChatLayoutSettings"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV16interItemSpacing14CoreFoundation7CGFloatVvp":{"name":"interItemSpacing","abstract":"\u003cp\u003eSpacing between the items in the section.\u003c/p\u003e","parent_name":"ChatLayoutSettings"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV19interSectionSpacing14CoreFoundation7CGFloatVvp":{"name":"interSectionSpacing","abstract":"\u003cp\u003eSpacing between the sections.\u003c/p\u003e","parent_name":"ChatLayoutSettings"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV16additionalInsetsSo06UIEdgeE0Vvp":{"name":"additionalInsets","abstract":"\u003cp\u003eAdditional insets for the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e content.\u003c/p\u003e","parent_name":"ChatLayoutSettings"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC9alignmentAA0A13ItemAlignmentOvp":{"name":"alignment","abstract":"\u003cp\u003eAlignment of the current item. Can be changed within \u003ccode\u003eUICollectionViewCell.preferredLayoutAttributesFitting(...)\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC16interItemSpacing14CoreFoundation7CGFloatVvp":{"name":"interItemSpacing","abstract":"\u003cp\u003eInter item spacing. Can be changed within \u003ccode\u003eUICollectionViewCell.preferredLayoutAttributesFitting(...)\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC16additionalInsetsSo06UIEdgeE0Vvp":{"name":"additionalInsets","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003es additional insets setup using \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutSettings.html\"\u003eChatLayoutSettings\u003c/a\u003e\u003c/code\u003e. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC8viewSizeSo6CGSizeVvp":{"name":"viewSize","abstract":"\u003cp\u003e\u003ccode\u003eUICollectionView\u003c/code\u003es frame size. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC21adjustedContentInsetsSo06UIEdgeF0Vvp":{"name":"adjustedContentInsets","abstract":"\u003cp\u003e\u003ccode\u003eUICollectionView\u003c/code\u003es adjusted content insets. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC17visibleBoundsSizeSo6CGSizeVvp":{"name":"visibleBoundsSize","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003es visible bounds size excluding \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC21adjustedContentInsetsSo06UIEdgeF0Vvp\"\u003eadjustedContentInsets\u003c/a\u003e\u003c/code\u003e. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC11layoutFrameSo6CGRectVvp":{"name":"layoutFrame","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003es visible bounds size excluding \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC21adjustedContentInsetsSo06UIEdgeF0Vvp\"\u003eadjustedContentInsets\u003c/a\u003e\u003c/code\u003e and \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC16additionalInsetsSo06UIEdgeE0Vvp\"\u003eadditionalInsets\u003c/a\u003e\u003c/code\u003e. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/c:@M@ChatLayout@objc(cs)ChatLayoutAttributes(im)copyWithZone:":{"name":"copy(with:)","abstract":"\u003cp\u003eReturns an exact copy of \u003ccode\u003eChatLayoutAttributes\u003c/code\u003e.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/c:@M@ChatLayout@objc(cs)ChatLayoutAttributes(im)isEqual:":{"name":"isEqual(_:)","abstract":"\u003cp\u003eReturns a Boolean value indicating whether two \u003ccode\u003eChatLayoutAttributes\u003c/code\u003e are considered equal.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC4kindAA8ItemKindOvp":{"name":"kind","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemKind.html\"\u003eItemKind\u003c/a\u003e\u003c/code\u003e represented by this attributes object.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP19shouldPresentHeader_2atSbAA014CollectionViewaB0C_SitF":{"name":"shouldPresentHeader(_:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask if it should present the header in the current layout.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP19shouldPresentFooter_2atSbAA014CollectionViewaB0C_SitF":{"name":"shouldPresentFooter(_:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask if it should present the footer in the current layout.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP11sizeForItem_2of2atAA0F4SizeOAA014CollectionViewaB0C_AA0F4KindO10Foundation9IndexPathVtF":{"name":"sizeForItem(_:of:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask what size the item should have.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP16alignmentForItem_2of2atAA0aF9AlignmentOAA014CollectionViewaB0C_AA0F4KindO10Foundation9IndexPathVtF":{"name":"alignmentForItem(_:of:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask what type of alignment the item should have.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP07initialB25AttributesForInsertedItem_2of2at9modifying2onyAA014CollectionViewaB0C_AA0H4KindO10Foundation9IndexPathVAA0abE0CAA07InitialE11RequestTypeOtF":{"name":"initialLayoutAttributesForInsertedItem(_:of:at:modifying:on:)","abstract":"\u003cp\u003eAsks the delegate to modify a layout attributes instance so that it represents the initial visual state of an item","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP05finalB24AttributesForDeletedItem_2of2at9modifyingyAA014CollectionViewaB0C_AA0H4KindO10Foundation9IndexPathVAA0abE0CtF":{"name":"finalLayoutAttributesForDeletedItem(_:of:at:modifying:)","abstract":"\u003cp\u003eAsks the delegate to modify a layout attributes instance so that it represents the final visual state of an item","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP16interItemSpacing_2of5after14CoreFoundation7CGFloatVSgAA014CollectionViewaB0C_AA0E4KindO0J09IndexPathVtF":{"name":"interItemSpacing(_:of:after:)","abstract":"\u003cp\u003eReturns the interval between items. If returns \u003ccode\u003enil\u003c/code\u003e - the value from \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutSettings.html\"\u003eChatLayoutSettings\u003c/a\u003e\u003c/code\u003e will be used.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP19interSectionSpacing_5after14CoreFoundation7CGFloatVSgAA014CollectionViewaB0C_SitF":{"name":"interSectionSpacing(_:after:)","abstract":"\u003cp\u003eReturns the interval between sections. If returns \u003ccode\u003enil\u003c/code\u003e - the value from \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutSettings.html\"\u003eChatLayoutSettings\u003c/a\u003e\u003c/code\u003e will be used.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C8delegateAA0aB8Delegate_pSgvp":{"name":"delegate","abstract":"\u003cp\u003e\u003ccode\u003eCollectionViewChatLayout\u003c/code\u003e delegate.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C8settingsAA0aB8SettingsVvp":{"name":"settings","abstract":"\u003cp\u003eAdditional settings for \u003ccode\u003eCollectionViewChatLayout\u003c/code\u003e.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C39keepContentOffsetAtBottomOnBatchUpdatesSbvp":{"name":"keepContentOffsetAtBottomOnBatchUpdates","abstract":"\u003cp\u003eDefault \u003ccode\u003eUIScrollView\u003c/code\u003e behaviour is to keep content offset constant from the top edge. If this flag is set to \u003ccode\u003etrue\u003c/code\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C45processOnlyVisibleItemsOnAnimatedBatchUpdatesSbvp":{"name":"processOnlyVisibleItemsOnAnimatedBatchUpdates","abstract":"\u003cp\u003etries to process only the elements that are currently visible on the screen. But often it is not needed. This flag allows you to have fine control over this behaviour.","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C29supportSelfSizingInvalidationSbvp":{"name":"supportSelfSizingInvalidation","abstract":"\u003cp\u003eA mode that enables automatic self-sizing invalidation after Auto Layout changes. It\u0026rsquo;s advisable to continue using the reload/reconfigure method, especially when multiple","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C13visibleBoundsSo6CGRectVvp":{"name":"visibleBounds","abstract":"\u003cp\u003eRepresent the currently visible rectangle.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C11layoutFrameSo6CGRectVvp":{"name":"layoutFrame","abstract":"\u003cp\u003eRepresent the rectangle where all the items are aligned.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(py)developmentLayoutDirection":{"name":"developmentLayoutDirection","abstract":"\u003cp\u003eThe direction of the language you used when designing \u003ccode\u003eCollectionViewChatLayout\u003c/code\u003e layout.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(py)flipsHorizontallyInOppositeLayoutDirection":{"name":"flipsHorizontallyInOppositeLayoutDirection","abstract":"\u003cp\u003eA Boolean value that indicates whether the horizontal coordinate system is automatically flipped at appropriate times.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(cpy)layoutAttributesClass":{"name":"layoutAttributesClass","abstract":"\u003cp\u003eCustom layoutAttributesClass is \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html\"\u003eChatLayoutAttributes\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(cpy)invalidationContextClass":{"name":"invalidationContextClass","abstract":"\u003cp\u003eCustom invalidationContextClass is \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutInvalidationContext.html\"\u003eChatLayoutInvalidationContext\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(py)collectionViewContentSize":{"name":"collectionViewContentSize","abstract":"\u003cp\u003eThe width and height of the collection view’s contents.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C16enableIOS15_1FixSbvp":{"name":"enableIOS15_1Fix","abstract":"\u003cp\u003eThere is an issue in IOS 15.1 that proposed content offset is being ignored by the UICollectionView when user is scrolling.","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C027flipsHorizontallyInOppositeB9DirectionACSb_tcfc":{"name":"init(flipsHorizontallyInOppositeLayoutDirection:)","abstract":"\u003cp\u003eDefault constructor.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)initWithCoder:":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C24getContentOffsetSnapshot4fromAA0ab8PositionH0VSgAG4EdgeO_tF":{"name":"getContentOffsetSnapshot(from:)","abstract":"\u003cp\u003eGet current offset of the item closest to the provided edge.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C20restoreContentOffset4withyAA0aB16PositionSnapshotV_tF":{"name":"restoreContentOffset(with:)","abstract":"\u003cp\u003eInvalidates layout of the \u003ccode\u003eUICollectionView\u003c/code\u003e and trying to keep the offset of the item provided in \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutPositionSnapshot.html\"\u003eChatLayoutPositionSnapshot\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C16reconfigureItems2atySay10Foundation9IndexPathVG_tF":{"name":"reconfigureItems(at:)","abstract":"\u003cp\u003eIf you want to use new \u003ccode\u003eUICollectionView.reconfigureItems(..)\u003c/code\u003e api and expect the reconfiguration to happen animated as well\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)prepareLayout":{"name":"prepare()","abstract":"\u003cp\u003eTells the layout object to update the current layout.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)layoutAttributesForElementsInRect:":{"name":"layoutAttributesForElements(in:)","abstract":"\u003cp\u003eRetrieves the layout attributes for all of the cells and views in the specified rectangle.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)layoutAttributesForItemAtIndexPath:":{"name":"layoutAttributesForItem(at:)","abstract":"\u003cp\u003eRetrieves layout information for an item at the specified index path with a corresponding cell.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)layoutAttributesForSupplementaryViewOfKind:atIndexPath:":{"name":"layoutAttributesForSupplementaryView(ofKind:at:)","abstract":"\u003cp\u003eRetrieves the layout attributes for the specified supplementary view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)prepareForAnimatedBoundsChange:":{"name":"prepare(forAnimatedBoundsChange:)","abstract":"\u003cp\u003ePrepares the layout object for animated changes to the view’s bounds or the insertion or deletion of items.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalizeAnimatedBoundsChange":{"name":"finalizeAnimatedBoundsChange()","abstract":"\u003cp\u003eCleans up after any animated changes to the view’s bounds or after the insertion or deletion of items.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)shouldInvalidateLayoutForPreferredLayoutAttributes:withOriginalAttributes:":{"name":"shouldInvalidateLayout(forPreferredLayoutAttributes:withOriginalAttributes:)","abstract":"\u003cp\u003eAsks the layout object if changes to a self-sizing cell require a layout update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidationContextForPreferredLayoutAttributes:withOriginalAttributes:":{"name":"invalidationContext(forPreferredLayoutAttributes:withOriginalAttributes:)","abstract":"\u003cp\u003eRetrieves a context object that identifies the portions of the layout that should change in response to dynamic cell changes.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)shouldInvalidateLayoutForBoundsChange:":{"name":"shouldInvalidateLayout(forBoundsChange:)","abstract":"\u003cp\u003eAsks the layout object if the new bounds require a layout update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidationContextForBoundsChange:":{"name":"invalidationContext(forBoundsChange:)","abstract":"\u003cp\u003eRetrieves a context object that defines the portions of the layout that should change when a bounds change occurs.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidateLayoutWithContext:":{"name":"invalidateLayout(with:)","abstract":"\u003cp\u003eInvalidates the current layout using the information in the provided context object.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidateLayout":{"name":"invalidateLayout()","abstract":"\u003cp\u003eInvalidates the current layout and triggers a layout update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)targetContentOffsetForProposedContentOffset:":{"name":"targetContentOffset(forProposedContentOffset:)","abstract":"\u003cp\u003eRetrieves the content offset to use after an animated layout update or change.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)prepareForCollectionViewUpdates:":{"name":"prepare(forCollectionViewUpdates:)","abstract":"\u003cp\u003eNotifies the layout object that the contents of the collection view are about to change.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalizeCollectionViewUpdates":{"name":"finalizeCollectionViewUpdates()","abstract":"\u003cp\u003ePerforms any additional animations or clean up needed during a collection view update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)initialLayoutAttributesForAppearingItemAtIndexPath:":{"name":"initialLayoutAttributesForAppearingItem(at:)","abstract":"\u003cp\u003eRetrieves the starting layout information for an item being inserted into the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalLayoutAttributesForDisappearingItemAtIndexPath:":{"name":"finalLayoutAttributesForDisappearingItem(at:)","abstract":"\u003cp\u003eRetrieves the final layout information for an item that is about to be removed from the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)initialLayoutAttributesForAppearingSupplementaryElementOfKind:atIndexPath:":{"name":"initialLayoutAttributesForAppearingSupplementaryElement(ofKind:at:)","abstract":"\u003cp\u003eRetrieves the starting layout information for a supplementary view being inserted into the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalLayoutAttributesForDisappearingSupplementaryElementOfKind:atIndexPath:":{"name":"finalLayoutAttributesForDisappearingSupplementaryElement(ofKind:at:)","abstract":"\u003cp\u003eRetrieves the final layout information for a supplementary view that is about to be removed from the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html":{"name":"CollectionViewChatLayout","abstract":"\u003cp\u003eA collection view layout designed to display items in a grid similar to \u003ccode\u003eUITableView\u003c/code\u003e, while aligning them to the"},"Protocols/ChatLayoutDelegate.html":{"name":"ChatLayoutDelegate","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e delegate\u003c/p\u003e"},"Classes/ChatLayoutAttributes.html":{"name":"ChatLayoutAttributes","abstract":"\u003cp\u003eCustom implementation of \u003ccode\u003eUICollectionViewLayoutAttributes\u003c/code\u003e\u003c/p\u003e"},"Structs/ChatLayoutSettings.html":{"name":"ChatLayoutSettings","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e settings.\u003c/p\u003e"},"Structs/ChatLayoutPositionSnapshot.html":{"name":"ChatLayoutPositionSnapshot","abstract":"\u003cp\u003eRepresents content offset position expressed by the specific item and it offset from the top or bottom edge.\u003c/p\u003e"},"Classes/ChatLayoutInvalidationContext.html":{"name":"ChatLayoutInvalidationContext","abstract":"\u003cp\u003eCustom implementation of \u003ccode\u003eUICollectionViewLayoutInvalidationContext\u003c/code\u003e\u003c/p\u003e"},"Enums/ItemKind.html":{"name":"ItemKind","abstract":"\u003cp\u003eType of the item supported by \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e"},"Enums/ItemSize.html":{"name":"ItemSize","abstract":"\u003cp\u003eRepresents desired item size.\u003c/p\u003e"},"Enums/ChatItemAlignment.html":{"name":"ChatItemAlignment","abstract":"\u003cp\u003eRepresent item alignment in collection view layout\u003c/p\u003e"},"Enums/InitialAttributesRequestType.html":{"name":"InitialAttributesRequestType","abstract":"\u003cp\u003eRepresents the point in time when \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e asks about layout attributes modification.\u003c/p\u003e"},"Core.html":{"name":"Core"},"Extras.html":{"name":"Extras"},"Other%20Guides.html":{"name":"Other Guides","abstract":"\u003cp\u003eThe following guides are available globally.\u003c/p\u003e"}} \ No newline at end of file +{"readme.html":{"name":"README"},"Structs/VoidViewFactory.html#/s:10ChatLayout15VoidViewFactoryV0cD0C":{"name":"VoidView","abstract":"\u003cp\u003eNil view placeholder type.\u003c/p\u003e","parent_name":"VoidViewFactory"},"Structs/VoidViewFactory.html#/s:10ChatLayout17StaticViewFactoryP05buildD06within0D0QzSgSo6CGRectV_tFZ":{"name":"buildView(within:)","parent_name":"VoidViewFactory"},"Protocols/StaticViewFactory.html#/s:10ChatLayout17StaticViewFactoryP0D0Qa":{"name":"View","abstract":"\u003cp\u003eA type of the view to build.\u003c/p\u003e","parent_name":"StaticViewFactory"},"Protocols/StaticViewFactory.html#/s:10ChatLayout17StaticViewFactoryP05buildD06within0D0QzSgSo6CGRectV_tFZ":{"name":"buildView(within:)","abstract":"\u003cp\u003eFactory method that will be called by the corresponding container \u003ccode\u003eUIView\u003c/code\u003e\u003c/p\u003e","parent_name":"StaticViewFactory"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC12cornerRadius14CoreFoundation7CGFloatVSgvp":{"name":"cornerRadius","abstract":"\u003cp\u003eCorner radius. If not provided then the half of the current view height will be used.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC06customF0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC5frameACyxGSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC5coderACyxGSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Classes/RoundedCornersContainerView.html#/s:10ChatLayout27RoundedCornersContainerViewC14layoutSubviewsyyF":{"name":"layoutSubviews()","abstract":"\u003cp\u003eLays out subviews.\u003c/p\u003e","parent_name":"RoundedCornersContainerView"},"Enums/ImageMaskedViewTransformation.html#/s:10ChatLayout29ImageMaskedViewTransformationO4asIsyA2CmF":{"name":"asIs","abstract":"\u003cp\u003eKeep image as it is.\u003c/p\u003e","parent_name":"ImageMaskedViewTransformation"},"Enums/ImageMaskedViewTransformation.html#/s:10ChatLayout29ImageMaskedViewTransformationO17flippedVerticallyyA2CmF":{"name":"flippedVertically","abstract":"\u003cp\u003eFlip image vertically.\u003c/p\u003e","parent_name":"ImageMaskedViewTransformation"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC07maskingC0So7UIImageCSgvp":{"name":"maskingImage","abstract":"\u003cp\u003eAn Image to be used as a mask for the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC06customE0xvp\"\u003ecustomView\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC18maskTransformationAA0cdeG0Ovp":{"name":"maskTransformation","abstract":"\u003cp\u003eA transformation to apply to the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC07maskingC0So7UIImageCSgvp\"\u003emaskingImage\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC5frameACyxGSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC5coderACyxGSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC5frameSo6CGRectVvp":{"name":"frame","abstract":"\u003cp\u003eThe frame rectangle, which describes the view’s location and size in its superview’s coordinate system.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC6boundsSo6CGRectVvp":{"name":"bounds","abstract":"\u003cp\u003eThe bounds rectangle, which describes the view’s location and size in its own coordinate system.\u003c/p\u003e","parent_name":"ImageMaskedView"},"Classes/SwappingContainerView/Distribution.html#/s:10ChatLayout21SwappingContainerViewC12DistributionO14accessoryFirstyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"accessoryFirst","abstract":"\u003cp\u003eThe \u003ccode\u003eAccessoryView\u003c/code\u003e should be positioned before the \u003ccode\u003eCustomView\u003c/code\u003e.\u003c/p\u003e","parent_name":"Distribution"},"Classes/SwappingContainerView/Distribution.html#/s:10ChatLayout21SwappingContainerViewC12DistributionO13accessoryLastyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"accessoryLast","abstract":"\u003cp\u003eThe \u003ccode\u003eAccessoryView\u003c/code\u003e should be positioned after the \u003ccode\u003eCustomView\u003c/code\u003e.\u003c/p\u003e","parent_name":"Distribution"},"Classes/SwappingContainerView/Axis.html#/s:10ChatLayout21SwappingContainerViewC4AxisO10horizontalyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"horizontal","abstract":"\u003cp\u003eThe constraint applied when laying out the horizontal relationship between views.\u003c/p\u003e","parent_name":"Axis"},"Classes/SwappingContainerView/Axis.html#/s:10ChatLayout21SwappingContainerViewC4AxisO8verticalyAEyxq__GAGmSo6UIViewCRbzAIRb_r0_lF":{"name":"vertical","abstract":"\u003cp\u003eThe constraint applied when laying out the vertical relationship between views.\u003c/p\u003e","parent_name":"Axis"},"Classes/SwappingContainerView/Axis.html":{"name":"Axis","abstract":"\u003cp\u003eKeys that specify a horizontal or vertical layout constraint between views.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView/Distribution.html":{"name":"Distribution","abstract":"\u003cp\u003eKeys that specify a distribution of the contained views.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC12distributionAC12DistributionOyxq__Gvp":{"name":"distribution","abstract":"\u003cp\u003eThe layout of the arranged subviews along the axis.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC4axisAC4AxisOyxq__Gvp":{"name":"axis","abstract":"\u003cp\u003eThe distribution axis of the contained view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC7spacing14CoreFoundation7CGFloatVvp":{"name":"spacing","abstract":"\u003cp\u003eThe distance in points between the edges of the contained views.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC17preferredPrioritySo08UILayoutG0avp":{"name":"preferredPriority","abstract":"\u003cp\u003ePreferred priority of the internal constraints.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC09accessoryE0q_vp":{"name":"accessoryView","abstract":"\u003cp\u003eContained accessory view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained main view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC5frame4axis12distribution7spacing17preferredPriorityACyxq_GSo6CGRectV_AC4AxisOyxq__GAC12DistributionOyxq__G14CoreFoundation7CGFloatVSo08UILayoutK0atcfc":{"name":"init(frame:axis:distribution:spacing:preferredPriority:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC5frameACyxq_GSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC023requiresConstraintBasedB0SbvpZ":{"name":"requiresConstraintBasedLayout","abstract":"\u003cp\u003eA Boolean value that indicates whether the receiver depends on the constraint-based layout system.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/SwappingContainerView.html#/s:10ChatLayout21SwappingContainerViewC17updateConstraintsyyF":{"name":"updateConstraints()","abstract":"\u003cp\u003eUpdates constraints for the view.\u003c/p\u003e","parent_name":"SwappingContainerView"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O3topyAEyx_GAGmSo6UIViewCRbzlF":{"name":"top","abstract":"\u003cp\u003eTop edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O7leadingyAEyx_GAGmSo6UIViewCRbzlF":{"name":"leading","abstract":"\u003cp\u003eLeading edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O8trailingyAEyx_GAGmSo6UIViewCRbzlF":{"name":"trailing","abstract":"\u003cp\u003eTrailing edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html#/s:10ChatLayout16EdgeAligningViewC0C0O6bottomyAEyx_GAGmSo6UIViewCRbzlF":{"name":"bottom","abstract":"\u003cp\u003eBottom edge\u003c/p\u003e","parent_name":"Edge"},"Classes/EdgeAligningView/Edge.html":{"name":"Edge","abstract":"\u003cp\u003eRepresents an edge of \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/EdgeAligningView.html\"\u003eEdgeAligningView\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC13flexibleEdgesShyAC0C0Oyx_GGvp":{"name":"flexibleEdges","abstract":"\u003cp\u003eSet of edge constraints to be set as loose.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC17preferredPrioritySo08UILayoutG0avp":{"name":"preferredPriority","abstract":"\u003cp\u003ePreferred priority of the internal constraints.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC4with13flexibleEdges17preferredPriorityACyxGx_ShyAC0C0Oyx_GGSo08UILayoutJ0atcfc":{"name":"init(with:flexibleEdges:preferredPriority:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated \u003ccode\u003eEdgeAligningView\u003c/code\u003e\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC5frameACyxGSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC5frame13flexibleEdges17preferredPriorityACyxGSo6CGRectV_ShyAC0C0Oyx_GGSo08UILayoutJ0atcfc":{"name":"init(frame:flexibleEdges:preferredPriority:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC023requiresConstraintBasedB0SbvpZ":{"name":"requiresConstraintBasedLayout","abstract":"\u003cp\u003eA Boolean value that indicates whether the receiver depends on the constraint-based layout system.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Classes/EdgeAligningView.html#/s:10ChatLayout16EdgeAligningViewC17updateConstraintsyyF":{"name":"updateConstraints()","abstract":"\u003cp\u003eUpdates constraints for the view.\u003c/p\u003e","parent_name":"EdgeAligningView"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO4fillyA2CmF":{"name":"fill","abstract":"\u003cp\u003eAlign the top and bottom edges of horizontally stacked items tightly to the container.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO3topyA2CmF":{"name":"top","abstract":"\u003cp\u003eAlign the top edges of horizontally stacked items tightly to the container.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO6centeryA2CmF":{"name":"center","abstract":"\u003cp\u003eCenter items in a horizontal stack vertically.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Enums/CellLayoutContainerViewAlignment.html#/s:10ChatLayout04CellB22ContainerViewAlignmentO6bottomyA2CmF":{"name":"bottom","abstract":"\u003cp\u003eAlign the bottom edges of horizontally stacked items tightly to the container.\u003c/p\u003e","parent_name":"CellLayoutContainerViewAlignment"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC07leadingE00E0QzSgvp":{"name":"leadingView","abstract":"\u003cp\u003eLeading accessory view.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC06customE0q_vp":{"name":"customView","abstract":"\u003cp\u003eMain view.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC08trailingE00E0Qy0_Sgvp":{"name":"trailingView","abstract":"\u003cp\u003eTrailing accessory view.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC9alignmentAA0cbdE9AlignmentOvp":{"name":"alignment","abstract":"\u003cp\u003eAlignment that corresponds to \u003ccode\u003eUIStackView.Alignment\u003c/code\u003e\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC7spacing14CoreFoundation7CGFloatVvp":{"name":"spacing","abstract":"\u003cp\u003eDefault spacing between the views.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC20customLeadingSpacing14CoreFoundation7CGFloatVvp":{"name":"customLeadingSpacing","abstract":"\u003cp\u003eCustom spacing between the leading and main views.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC21customTrailingSpacing14CoreFoundation7CGFloatVvp":{"name":"customTrailingSpacing","abstract":"\u003cp\u003eCustom spacing between the main and trailing views.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC5frameACyxq_q0_GSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/CellLayoutContainerView.html#/s:10ChatLayout04CellB13ContainerViewC5coderACyxq_q0_GSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"CellLayoutContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC09accessoryE00E0QzSgvp":{"name":"accessoryView","abstract":"\u003cp\u003eAn accessory view.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC06customE0q_vp":{"name":"customView","abstract":"\u003cp\u003eMain view.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC9alignmentAA0A13ItemAlignmentOvp":{"name":"alignment","abstract":"\u003cp\u003eAn alignment of the contained views within the \u003ccode\u003eMessageContainerView\u003c/code\u003e,\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC5frameACyxq_GSo6CGRectV_tcfc":{"name":"init(frame:)","abstract":"\u003cp\u003eInitializes and returns a newly allocated view object with the specified frame rectangle.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/MessageContainerView.html#/s:10ChatLayout20MessageContainerViewC5coderACyxq_GSgSo7NSCoderC_tcfc":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"MessageContainerView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC15reuseIdentifierSSvpZ":{"name":"reuseIdentifier","abstract":"\u003cp\u003eDefault reuse identifier is set with the class name.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC06customF0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC8delegateAA0cdF12CellDelegate_pSgvp":{"name":"delegate","abstract":"\u003cp\u003eAn instance of \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/ContainerCollectionViewCellDelegate.html\"\u003eContainerCollectionViewCellDelegate\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC15prepareForReuseyyF":{"name":"prepareForReuse()","abstract":"\u003cp\u003ePerforms any clean up necessary to prepare the view for use again.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC09preferredB17AttributesFittingySo012UICollectionfbH0CAFF":{"name":"preferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eGives the cell a chance to modify the attributes provided by the layout object.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Classes/ContainerCollectionReusableView.html#/s:10ChatLayout31ContainerCollectionReusableViewC5applyyySo012UICollectionfB10AttributesCF":{"name":"apply(_:)","abstract":"\u003cp\u003eApplies the specified layout attributes to the view.\u003c/p\u003e","parent_name":"ContainerCollectionReusableView"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP15prepareForReuseyyF":{"name":"prepareForReuse()","abstract":"\u003cp\u003ePerform any clean up necessary to prepare the view for use again.\u003c/p\u003e","parent_name":"ContainerCollectionViewCellDelegate"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP09preferredB17AttributesFittingyAA0abI0CSgAFF":{"name":"preferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eAllows to override the call of \u003ccode\u003eContainerCollectionViewCell\u003c/code\u003e/\u003ccode\u003eContainerCollectionReusableView\u003c/code\u003e","parent_name":"ContainerCollectionViewCellDelegate"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP015modifyPreferredB17AttributesFittingyyAA0abJ0CF":{"name":"modifyPreferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eAllows to additionally modify \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html\"\u003eChatLayoutAttributes\u003c/a\u003e\u003c/code\u003e after the \u003ccode\u003eUICollectionReusableView.preferredLayoutAttributesFitting(...)\u003c/code\u003e","parent_name":"ContainerCollectionViewCellDelegate"},"Protocols/ContainerCollectionViewCellDelegate.html#/s:10ChatLayout35ContainerCollectionViewCellDelegateP5applyyyAA0aB10AttributesCF":{"name":"apply(_:)","abstract":"\u003cp\u003eApply the specified layout attributes to the view.","parent_name":"ContainerCollectionViewCellDelegate"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC15reuseIdentifierSSvpZ":{"name":"reuseIdentifier","abstract":"\u003cp\u003eDefault reuse identifier is set with the class name.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC06customE0xvp":{"name":"customView","abstract":"\u003cp\u003eContained view.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC8delegateAA0cdeF8Delegate_pSgvp":{"name":"delegate","abstract":"\u003cp\u003eAn instance of \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbProtocols/ContainerCollectionViewCellDelegate.html\"\u003eContainerCollectionViewCellDelegate\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC15prepareForReuseyyF":{"name":"prepareForReuse()","abstract":"\u003cp\u003ePerforms any clean up necessary to prepare the view for use again.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC09preferredB17AttributesFittingySo012UICollectionebH0CAFF":{"name":"preferredLayoutAttributesFitting(_:)","abstract":"\u003cp\u003eGives the cell a chance to modify the attributes provided by the layout object.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html#/s:10ChatLayout27ContainerCollectionViewCellC5applyyySo012UICollectioneB10AttributesCF":{"name":"apply(_:)","abstract":"\u003cp\u003eApplies the specified layout attributes to the view.\u003c/p\u003e","parent_name":"ContainerCollectionViewCell"},"Classes/ContainerCollectionViewCell.html":{"name":"ContainerCollectionViewCell","abstract":"\u003cp\u003eA container \u003ccode\u003eUICollectionViewCell\u003c/code\u003e that constraints its contained view to its margins.\u003c/p\u003e"},"Protocols/ContainerCollectionViewCellDelegate.html":{"name":"ContainerCollectionViewCellDelegate","abstract":"\u003cp\u003eA delegate of \u003ccode\u003eContainerCollectionViewCell\u003c/code\u003e/\u003ccode\u003eContainerCollectionReusableView\u003c/code\u003e should implement this methods if"},"Classes/ContainerCollectionReusableView.html":{"name":"ContainerCollectionReusableView","abstract":"\u003cp\u003eA container \u003ccode\u003eUICollectionReusableView\u003c/code\u003e that constraints its contained view to its margins.\u003c/p\u003e"},"Classes/MessageContainerView.html":{"name":"MessageContainerView","abstract":"\u003cp\u003eA container view that helps to layout the message view and its accessory\u003c/p\u003e"},"Classes/CellLayoutContainerView.html":{"name":"CellLayoutContainerView","abstract":"\u003cp\u003e\u003ccode\u003eCellLayoutContainerView\u003c/code\u003e is a container view that helps to arrange the views in a horizontal cell-alike layout with an optional \u003ccode\u003eLeadingAccessory\u003c/code\u003e first,"},"Enums/CellLayoutContainerViewAlignment.html":{"name":"CellLayoutContainerViewAlignment","abstract":"\u003cp\u003eAlignment for \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CellLayoutContainerView.html\"\u003eCellLayoutContainerView\u003c/a\u003e\u003c/code\u003e that corresponds to \u003ccode\u003eUIStackView.Alignment\u003c/code\u003e\u003c/p\u003e"},"Classes/EdgeAligningView.html":{"name":"EdgeAligningView","abstract":"\u003cp\u003eContainer view that allows its \u003ccode\u003eCustomView\u003c/code\u003e to have lose connection to the margins of the container according to the"},"Classes/SwappingContainerView.html":{"name":"SwappingContainerView","abstract":"\u003cp\u003eThis container view is designed to hold two \u003ccode\u003eUIView\u003c/code\u003e elements and arrange them in a horizontal or vertical axis."},"Classes/ImageMaskedView.html":{"name":"ImageMaskedView","abstract":"\u003cp\u003eA container view that masks its contained view with an image provided.\u003c/p\u003e"},"Enums/ImageMaskedViewTransformation.html":{"name":"ImageMaskedViewTransformation","abstract":"\u003cp\u003eA transformation to apply to the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ImageMaskedView.html#/s:10ChatLayout15ImageMaskedViewC07maskingC0So7UIImageCSgvp\"\u003eImageMaskedView.maskingImage\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e"},"Classes/RoundedCornersContainerView.html":{"name":"RoundedCornersContainerView","abstract":"\u003cp\u003eA container view that keeps its \u003ccode\u003eCustomView\u003c/code\u003e masked with the corner radius provided.\u003c/p\u003e"},"Protocols/StaticViewFactory.html":{"name":"StaticViewFactory","abstract":"\u003cp\u003eA factory that creates optional contained \u003ccode\u003eUIView\u003c/code\u003es should conform to this protocol.\u003c/p\u003e"},"Structs/VoidViewFactory.html":{"name":"VoidViewFactory","abstract":"\u003cp\u003eUse this factory to specify that this view should not be build and should be equal to nil within the container.\u003c/p\u003e"},"Enums/InitialAttributesRequestType.html#/s:10ChatLayout28InitialAttributesRequestTypeO7initialyA2CmF":{"name":"initial","abstract":"\u003cp\u003e\u003ccode\u003eUICollectionView\u003c/code\u003e initially asks about the layout of an item.\u003c/p\u003e","parent_name":"InitialAttributesRequestType"},"Enums/InitialAttributesRequestType.html#/s:10ChatLayout28InitialAttributesRequestTypeO12invalidationyA2CmF":{"name":"invalidation","abstract":"\u003cp\u003eAn item is being invalidated.\u003c/p\u003e","parent_name":"InitialAttributesRequestType"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO7leadingyA2CmF":{"name":"leading","abstract":"\u003cp\u003eShould be aligned at the leading edge of the layout. That includes all the additional content offsets.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO6centeryA2CmF":{"name":"center","abstract":"\u003cp\u003eShould be aligned at the center of the layout.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO8trailingyA2CmF":{"name":"trailing","abstract":"\u003cp\u003eShould be aligned at the trailing edge of the layout.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ChatItemAlignment.html#/s:10ChatLayout0A13ItemAlignmentO9fullWidthyA2CmF":{"name":"fullWidth","abstract":"\u003cp\u003eShould be aligned using the full width of the available content width.\u003c/p\u003e","parent_name":"ChatItemAlignment"},"Enums/ItemSize/CaseType.html#/s:10ChatLayout8ItemSizeO8CaseTypeO4autoyA2EmF":{"name":"auto","abstract":"\u003cp\u003eRepresents \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemSize.html#/s:10ChatLayout8ItemSizeO4autoyA2CmF\"\u003eItemSize.auto\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"CaseType"},"Enums/ItemSize/CaseType.html#/s:10ChatLayout8ItemSizeO8CaseTypeO9estimatedyA2EmF":{"name":"estimated","abstract":"\u003cp\u003eRepresents \u003ccode\u003eItemSize.estimated\u003c/code\u003e\u003c/p\u003e","parent_name":"CaseType"},"Enums/ItemSize/CaseType.html#/s:10ChatLayout8ItemSizeO8CaseTypeO5exactyA2EmF":{"name":"exact","abstract":"\u003cp\u003eRepresents \u003ccode\u003eItemSize.exact\u003c/code\u003e\u003c/p\u003e","parent_name":"CaseType"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO4autoyA2CmF":{"name":"auto","abstract":"\u003cp\u003eItem size should be fully calculated by the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e.","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO9estimatedyACSo6CGSizeVcACmF":{"name":"estimated(_:)","abstract":"\u003cp\u003eItem size should be fully calculated by the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e.","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO5exactyACSo6CGSizeVcACmF":{"name":"exact(_:)","abstract":"\u003cp\u003eItem size should be exactly equal to the value provided.\u003c/p\u003e","parent_name":"ItemSize"},"Enums/ItemSize/CaseType.html":{"name":"CaseType","abstract":"\u003cp\u003eRepresents current item size case type.\u003c/p\u003e","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:10ChatLayout8ItemSizeO8caseTypeAC04CaseF0Ovp":{"name":"caseType","abstract":"\u003cp\u003eReturns current item size case type.\u003c/p\u003e","parent_name":"ItemSize"},"Enums/ItemSize.html#/s:SH4hash4intoys6HasherVz_tF":{"name":"hash(into:)","parent_name":"ItemSize"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO6headeryA2CmF":{"name":"header","abstract":"\u003cp\u003eHeader item\u003c/p\u003e","parent_name":"ItemKind"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO4cellyA2CmF":{"name":"cell","abstract":"\u003cp\u003eCell item\u003c/p\u003e","parent_name":"ItemKind"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO6footeryA2CmF":{"name":"footer","abstract":"\u003cp\u003eFooter item\u003c/p\u003e","parent_name":"ItemKind"},"Enums/ItemKind.html#/s:10ChatLayout8ItemKindO015isSupplementaryC0Sbvp":{"name":"isSupplementaryItem","abstract":"\u003cp\u003eReturns: \u003ccode\u003etrue\u003c/code\u003e if this \u003ccode\u003eItemKind\u003c/code\u003e is equal to \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemKind.html#/s:10ChatLayout8ItemKindO6headeryA2CmF\"\u003eItemKind.header\u003c/a\u003e\u003c/code\u003e or \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemKind.html#/s:10ChatLayout8ItemKindO6footeryA2CmF\"\u003eItemKind.footer\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ItemKind"},"Classes/ChatLayoutInvalidationContext.html#/s:10ChatLayout0aB19InvalidationContextC010invalidateB7MetricsSbvp":{"name":"invalidateLayoutMetrics","abstract":"\u003cp\u003eIndicates whether to recompute the positions and sizes of the items based on the current","parent_name":"ChatLayoutInvalidationContext"},"Structs/ChatLayoutPositionSnapshot/Edge.html#/s:10ChatLayout0aB16PositionSnapshotV4EdgeO3topyA2EmF":{"name":"top","abstract":"\u003cp\u003eTop edge of the \u003ccode\u003eUICollectionView\u003c/code\u003e\u003c/p\u003e","parent_name":"Edge"},"Structs/ChatLayoutPositionSnapshot/Edge.html#/s:10ChatLayout0aB16PositionSnapshotV4EdgeO6bottomyA2EmF":{"name":"bottom","abstract":"\u003cp\u003eBottom edge of the \u003ccode\u003eUICollectionView\u003c/code\u003e\u003c/p\u003e","parent_name":"Edge"},"Structs/ChatLayoutPositionSnapshot/Edge.html":{"name":"Edge","abstract":"\u003cp\u003eRepresents the edge.\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV9indexPath10Foundation05IndexF0Vvp":{"name":"indexPath","abstract":"\u003cp\u003eItem\u0026rsquo;s \u003ccode\u003eIndexPath\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV4kindAA8ItemKindOvp":{"name":"kind","abstract":"\u003cp\u003eKind of item at the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV9indexPath10Foundation05IndexF0Vvp\"\u003eindexPath\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV4edgeAC4EdgeOvp":{"name":"edge","abstract":"\u003cp\u003eThe edge of the offset.\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV6offset14CoreFoundation7CGFloatVvp":{"name":"offset","abstract":"\u003cp\u003eThe offset from the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV4edgeAC4EdgeOvp\"\u003eedge\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutPositionSnapshot.html#/s:10ChatLayout0aB16PositionSnapshotV9indexPath4kind4edge6offsetAC10Foundation05IndexF0V_AA8ItemKindOAC4EdgeO04CoreJ07CGFloatVtcfc":{"name":"init(indexPath:kind:edge:offset:)","abstract":"\u003cp\u003eConstructor\u003c/p\u003e","parent_name":"ChatLayoutPositionSnapshot"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV17estimatedItemSizeSo6CGSizeVSgvp":{"name":"estimatedItemSize","abstract":"\u003cp\u003eEstimated item size for \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e. This value will be used as the initial size of the item and the final size","parent_name":"ChatLayoutSettings"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV16interItemSpacing14CoreFoundation7CGFloatVvp":{"name":"interItemSpacing","abstract":"\u003cp\u003eSpacing between the items in the section.\u003c/p\u003e","parent_name":"ChatLayoutSettings"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV19interSectionSpacing14CoreFoundation7CGFloatVvp":{"name":"interSectionSpacing","abstract":"\u003cp\u003eSpacing between the sections.\u003c/p\u003e","parent_name":"ChatLayoutSettings"},"Structs/ChatLayoutSettings.html#/s:10ChatLayout0aB8SettingsV16additionalInsetsSo06UIEdgeE0Vvp":{"name":"additionalInsets","abstract":"\u003cp\u003eAdditional insets for the \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e content.\u003c/p\u003e","parent_name":"ChatLayoutSettings"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC9alignmentAA0A13ItemAlignmentOvp":{"name":"alignment","abstract":"\u003cp\u003eAlignment of the current item. Can be changed within \u003ccode\u003eUICollectionViewCell.preferredLayoutAttributesFitting(...)\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC16interItemSpacing14CoreFoundation7CGFloatVvp":{"name":"interItemSpacing","abstract":"\u003cp\u003eInter item spacing. Can be changed within \u003ccode\u003eUICollectionViewCell.preferredLayoutAttributesFitting(...)\u003c/code\u003e\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC16additionalInsetsSo06UIEdgeE0Vvp":{"name":"additionalInsets","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003es additional insets setup using \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutSettings.html\"\u003eChatLayoutSettings\u003c/a\u003e\u003c/code\u003e. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC8viewSizeSo6CGSizeVvp":{"name":"viewSize","abstract":"\u003cp\u003e\u003ccode\u003eUICollectionView\u003c/code\u003es frame size. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC21adjustedContentInsetsSo06UIEdgeF0Vvp":{"name":"adjustedContentInsets","abstract":"\u003cp\u003e\u003ccode\u003eUICollectionView\u003c/code\u003es adjusted content insets. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC17visibleBoundsSizeSo6CGSizeVvp":{"name":"visibleBoundsSize","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003es visible bounds size excluding \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC21adjustedContentInsetsSo06UIEdgeF0Vvp\"\u003eadjustedContentInsets\u003c/a\u003e\u003c/code\u003e. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC11layoutFrameSo6CGRectVvp":{"name":"layoutFrame","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003es visible bounds size excluding \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC21adjustedContentInsetsSo06UIEdgeF0Vvp\"\u003eadjustedContentInsets\u003c/a\u003e\u003c/code\u003e and \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC16additionalInsetsSo06UIEdgeE0Vvp\"\u003eadditionalInsets\u003c/a\u003e\u003c/code\u003e. Added for convenience.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/c:@M@ChatLayout@objc(cs)ChatLayoutAttributes(im)copyWithZone:":{"name":"copy(with:)","abstract":"\u003cp\u003eReturns an exact copy of \u003ccode\u003eChatLayoutAttributes\u003c/code\u003e.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/c:@M@ChatLayout@objc(cs)ChatLayoutAttributes(im)isEqual:":{"name":"isEqual(_:)","abstract":"\u003cp\u003eReturns a Boolean value indicating whether two \u003ccode\u003eChatLayoutAttributes\u003c/code\u003e are considered equal.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Classes/ChatLayoutAttributes.html#/s:10ChatLayout0aB10AttributesC4kindAA8ItemKindOvp":{"name":"kind","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbEnums/ItemKind.html\"\u003eItemKind\u003c/a\u003e\u003c/code\u003e represented by this attributes object.\u003c/p\u003e","parent_name":"ChatLayoutAttributes"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP19shouldPresentHeader_2atSbAA014CollectionViewaB0C_SitF":{"name":"shouldPresentHeader(_:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask if it should present the header in the current layout.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP19shouldPresentFooter_2atSbAA014CollectionViewaB0C_SitF":{"name":"shouldPresentFooter(_:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask if it should present the footer in the current layout.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP11sizeForItem_2of2atAA0F4SizeOAA014CollectionViewaB0C_AA0F4KindO10Foundation9IndexPathVtF":{"name":"sizeForItem(_:of:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask what size the item should have.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP16alignmentForItem_2of2atAA0aF9AlignmentOAA014CollectionViewaB0C_AA0F4KindO10Foundation9IndexPathVtF":{"name":"alignmentForItem(_:of:at:)","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e will call this method to ask what type of alignment the item should have.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP07initialB25AttributesForInsertedItem_2of2at9modifying2onyAA014CollectionViewaB0C_AA0H4KindO10Foundation9IndexPathVAA0abE0CAA07InitialE11RequestTypeOtF":{"name":"initialLayoutAttributesForInsertedItem(_:of:at:modifying:on:)","abstract":"\u003cp\u003eAsks the delegate to modify a layout attributes instance so that it represents the initial visual state of an item","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP05finalB24AttributesForDeletedItem_2of2at9modifyingyAA014CollectionViewaB0C_AA0H4KindO10Foundation9IndexPathVAA0abE0CtF":{"name":"finalLayoutAttributesForDeletedItem(_:of:at:modifying:)","abstract":"\u003cp\u003eAsks the delegate to modify a layout attributes instance so that it represents the final visual state of an item","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP16interItemSpacing_2of5after14CoreFoundation7CGFloatVSgAA014CollectionViewaB0C_AA0E4KindO0J09IndexPathVtF":{"name":"interItemSpacing(_:of:after:)","abstract":"\u003cp\u003eReturns the interval between items. If returns \u003ccode\u003enil\u003c/code\u003e - the value from \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutSettings.html\"\u003eChatLayoutSettings\u003c/a\u003e\u003c/code\u003e will be used.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Protocols/ChatLayoutDelegate.html#/s:10ChatLayout0aB8DelegateP19interSectionSpacing_5after14CoreFoundation7CGFloatVSgAA014CollectionViewaB0C_SitF":{"name":"interSectionSpacing(_:after:)","abstract":"\u003cp\u003eReturns the interval between sections. If returns \u003ccode\u003enil\u003c/code\u003e - the value from \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutSettings.html\"\u003eChatLayoutSettings\u003c/a\u003e\u003c/code\u003e will be used.\u003c/p\u003e","parent_name":"ChatLayoutDelegate"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C8delegateAA0aB8Delegate_pSgvp":{"name":"delegate","abstract":"\u003cp\u003e\u003ccode\u003eCollectionViewChatLayout\u003c/code\u003e delegate.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C8settingsAA0aB8SettingsVvp":{"name":"settings","abstract":"\u003cp\u003eAdditional settings for \u003ccode\u003eCollectionViewChatLayout\u003c/code\u003e.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C39keepContentOffsetAtBottomOnBatchUpdatesSbvp":{"name":"keepContentOffsetAtBottomOnBatchUpdates","abstract":"\u003cp\u003eThe default \u003ccode\u003eUIScrollView\u003c/code\u003e behaviour is to keep content offset constant from the top edge. If this flag is set to \u003ccode\u003etrue\u003c/code\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C32keepContentAtBottomOfVisibleAreaSbvp":{"name":"keepContentAtBottomOfVisibleArea","abstract":"\u003cp\u003eThe default behavior of UICollectionView is to maintain UICollectionViewCells at the top of the visible rectangle","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C45processOnlyVisibleItemsOnAnimatedBatchUpdatesSbvp":{"name":"processOnlyVisibleItemsOnAnimatedBatchUpdates","abstract":"\u003cp\u003etries to process only the elements that are currently visible on the screen. But often it is not needed. This flag allows you to have fine control over this behaviour.","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C29supportSelfSizingInvalidationSbvp":{"name":"supportSelfSizingInvalidation","abstract":"\u003cp\u003eA mode that enables automatic self-sizing invalidation after Auto Layout changes. It\u0026rsquo;s advisable to continue using the reload/reconfigure method, especially when multiple","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C13visibleBoundsSo6CGRectVvp":{"name":"visibleBounds","abstract":"\u003cp\u003eRepresent the currently visible rectangle.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C11layoutFrameSo6CGRectVvp":{"name":"layoutFrame","abstract":"\u003cp\u003eRepresent the rectangle where all the items are aligned.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(py)developmentLayoutDirection":{"name":"developmentLayoutDirection","abstract":"\u003cp\u003eThe direction of the language you used when designing \u003ccode\u003eCollectionViewChatLayout\u003c/code\u003e layout.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(py)flipsHorizontallyInOppositeLayoutDirection":{"name":"flipsHorizontallyInOppositeLayoutDirection","abstract":"\u003cp\u003eA Boolean value that indicates whether the horizontal coordinate system is automatically flipped at appropriate times.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(cpy)layoutAttributesClass":{"name":"layoutAttributesClass","abstract":"\u003cp\u003eCustom layoutAttributesClass is \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutAttributes.html\"\u003eChatLayoutAttributes\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(cpy)invalidationContextClass":{"name":"invalidationContextClass","abstract":"\u003cp\u003eCustom invalidationContextClass is \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/ChatLayoutInvalidationContext.html\"\u003eChatLayoutInvalidationContext\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(py)collectionViewContentSize":{"name":"collectionViewContentSize","abstract":"\u003cp\u003eThe width and height of the collection view’s contents.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C16enableIOS15_1FixSbvp":{"name":"enableIOS15_1Fix","abstract":"\u003cp\u003eThere is an issue in IOS 15.1 that proposed content offset is being ignored by the UICollectionView when user is scrolling.","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C027flipsHorizontallyInOppositeB9DirectionACSb_tcfc":{"name":"init(flipsHorizontallyInOppositeLayoutDirection:)","abstract":"\u003cp\u003eDefault constructor.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)initWithCoder:":{"name":"init(coder:)","abstract":"\u003cp\u003eReturns an object initialized from data in a given unarchiver.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C24getContentOffsetSnapshot4fromAA0ab8PositionH0VSgAG4EdgeO_tF":{"name":"getContentOffsetSnapshot(from:)","abstract":"\u003cp\u003eGet current offset of the item closest to the provided edge.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C20restoreContentOffset4withyAA0aB16PositionSnapshotV_tF":{"name":"restoreContentOffset(with:)","abstract":"\u003cp\u003eInvalidates layout of the \u003ccode\u003eUICollectionView\u003c/code\u003e and trying to keep the offset of the item provided in \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/ChatLayoutPositionSnapshot.html\"\u003eChatLayoutPositionSnapshot\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/s:10ChatLayout014CollectionViewaB0C16reconfigureItems2atySay10Foundation9IndexPathVG_tF":{"name":"reconfigureItems(at:)","abstract":"\u003cp\u003eIf you want to use new \u003ccode\u003eUICollectionView.reconfigureItems(..)\u003c/code\u003e api and expect the reconfiguration to happen animated as well\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)prepareLayout":{"name":"prepare()","abstract":"\u003cp\u003eTells the layout object to update the current layout.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)layoutAttributesForElementsInRect:":{"name":"layoutAttributesForElements(in:)","abstract":"\u003cp\u003eRetrieves the layout attributes for all of the cells and views in the specified rectangle.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)layoutAttributesForItemAtIndexPath:":{"name":"layoutAttributesForItem(at:)","abstract":"\u003cp\u003eRetrieves layout information for an item at the specified index path with a corresponding cell.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)layoutAttributesForSupplementaryViewOfKind:atIndexPath:":{"name":"layoutAttributesForSupplementaryView(ofKind:at:)","abstract":"\u003cp\u003eRetrieves the layout attributes for the specified supplementary view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)prepareForAnimatedBoundsChange:":{"name":"prepare(forAnimatedBoundsChange:)","abstract":"\u003cp\u003ePrepares the layout object for animated changes to the view’s bounds or the insertion or deletion of items.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalizeAnimatedBoundsChange":{"name":"finalizeAnimatedBoundsChange()","abstract":"\u003cp\u003eCleans up after any animated changes to the view’s bounds or after the insertion or deletion of items.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)shouldInvalidateLayoutForPreferredLayoutAttributes:withOriginalAttributes:":{"name":"shouldInvalidateLayout(forPreferredLayoutAttributes:withOriginalAttributes:)","abstract":"\u003cp\u003eAsks the layout object if changes to a self-sizing cell require a layout update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidationContextForPreferredLayoutAttributes:withOriginalAttributes:":{"name":"invalidationContext(forPreferredLayoutAttributes:withOriginalAttributes:)","abstract":"\u003cp\u003eRetrieves a context object that identifies the portions of the layout that should change in response to dynamic cell changes.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)shouldInvalidateLayoutForBoundsChange:":{"name":"shouldInvalidateLayout(forBoundsChange:)","abstract":"\u003cp\u003eAsks the layout object if the new bounds require a layout update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidationContextForBoundsChange:":{"name":"invalidationContext(forBoundsChange:)","abstract":"\u003cp\u003eRetrieves a context object that defines the portions of the layout that should change when a bounds change occurs.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidateLayoutWithContext:":{"name":"invalidateLayout(with:)","abstract":"\u003cp\u003eInvalidates the current layout using the information in the provided context object.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)invalidateLayout":{"name":"invalidateLayout()","abstract":"\u003cp\u003eInvalidates the current layout and triggers a layout update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)targetContentOffsetForProposedContentOffset:":{"name":"targetContentOffset(forProposedContentOffset:)","abstract":"\u003cp\u003eRetrieves the content offset to use after an animated layout update or change.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)prepareForCollectionViewUpdates:":{"name":"prepare(forCollectionViewUpdates:)","abstract":"\u003cp\u003eNotifies the layout object that the contents of the collection view are about to change.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalizeCollectionViewUpdates":{"name":"finalizeCollectionViewUpdates()","abstract":"\u003cp\u003ePerforms any additional animations or clean up needed during a collection view update.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)initialLayoutAttributesForAppearingItemAtIndexPath:":{"name":"initialLayoutAttributesForAppearingItem(at:)","abstract":"\u003cp\u003eRetrieves the starting layout information for an item being inserted into the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalLayoutAttributesForDisappearingItemAtIndexPath:":{"name":"finalLayoutAttributesForDisappearingItem(at:)","abstract":"\u003cp\u003eRetrieves the final layout information for an item that is about to be removed from the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)initialLayoutAttributesForAppearingSupplementaryElementOfKind:atIndexPath:":{"name":"initialLayoutAttributesForAppearingSupplementaryElement(ofKind:at:)","abstract":"\u003cp\u003eRetrieves the starting layout information for a supplementary view being inserted into the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html#/c:@M@ChatLayout@objc(cs)CollectionViewChatLayout(im)finalLayoutAttributesForDisappearingSupplementaryElementOfKind:atIndexPath:":{"name":"finalLayoutAttributesForDisappearingSupplementaryElement(ofKind:at:)","abstract":"\u003cp\u003eRetrieves the final layout information for a supplementary view that is about to be removed from the collection view.\u003c/p\u003e","parent_name":"CollectionViewChatLayout"},"Classes/CollectionViewChatLayout.html":{"name":"CollectionViewChatLayout","abstract":"\u003cp\u003eA collection view layout designed to display items in a grid similar to \u003ccode\u003eUITableView\u003c/code\u003e, while aligning them to the"},"Protocols/ChatLayoutDelegate.html":{"name":"ChatLayoutDelegate","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e delegate\u003c/p\u003e"},"Classes/ChatLayoutAttributes.html":{"name":"ChatLayoutAttributes","abstract":"\u003cp\u003eCustom implementation of \u003ccode\u003eUICollectionViewLayoutAttributes\u003c/code\u003e\u003c/p\u003e"},"Structs/ChatLayoutSettings.html":{"name":"ChatLayoutSettings","abstract":"\u003cp\u003e\u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e settings.\u003c/p\u003e"},"Structs/ChatLayoutPositionSnapshot.html":{"name":"ChatLayoutPositionSnapshot","abstract":"\u003cp\u003eRepresents content offset position expressed by the specific item and it offset from the top or bottom edge.\u003c/p\u003e"},"Classes/ChatLayoutInvalidationContext.html":{"name":"ChatLayoutInvalidationContext","abstract":"\u003cp\u003eCustom implementation of \u003ccode\u003eUICollectionViewLayoutInvalidationContext\u003c/code\u003e\u003c/p\u003e"},"Enums/ItemKind.html":{"name":"ItemKind","abstract":"\u003cp\u003eType of the item supported by \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e\u003c/p\u003e"},"Enums/ItemSize.html":{"name":"ItemSize","abstract":"\u003cp\u003eRepresents desired item size.\u003c/p\u003e"},"Enums/ChatItemAlignment.html":{"name":"ChatItemAlignment","abstract":"\u003cp\u003eRepresent item alignment in collection view layout\u003c/p\u003e"},"Enums/InitialAttributesRequestType.html":{"name":"InitialAttributesRequestType","abstract":"\u003cp\u003eRepresents the point in time when \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbClasses/CollectionViewChatLayout.html\"\u003eCollectionViewChatLayout\u003c/a\u003e\u003c/code\u003e asks about layout attributes modification.\u003c/p\u003e"},"Core.html":{"name":"Core"},"Extras.html":{"name":"Extras"},"Other%20Guides.html":{"name":"Other Guides","abstract":"\u003cp\u003eThe following guides are available globally.\u003c/p\u003e"}} \ No newline at end of file