From d26da553d1373a962e60f2f1cdfbe48426853f27 Mon Sep 17 00:00:00 2001 From: Eugene Kazaev Date: Tue, 30 Apr 2024 15:31:14 +0100 Subject: [PATCH] Added `keepContentAtBottomOfVisibleArea` flag --- ChatLayout.podspec | 2 +- .../Core/CollectionViewChatLayout.swift | 7 +++- .../Classes/Core/Model/StateController.swift | 7 ++++ .../Chat/View/ChatViewController.swift | 5 +++ Example/Podfile.lock | 12 +++--- Example/Tests/MockCollectionLayout.swift | 2 + docs/Classes/CellLayoutContainerView.html | 4 +- docs/Classes/ChatLayoutAttributes.html | 4 +- .../ChatLayoutInvalidationContext.html | 4 +- docs/Classes/CollectionViewChatLayout.html | 35 ++++++++++++++++-- .../ContainerCollectionReusableView.html | 4 +- docs/Classes/ContainerCollectionViewCell.html | 4 +- docs/Classes/EdgeAligningView.html | 4 +- docs/Classes/EdgeAligningView/Edge.html | 4 +- docs/Classes/ImageMaskedView.html | 4 +- docs/Classes/MessageContainerView.html | 4 +- docs/Classes/RoundedCornersContainerView.html | 4 +- docs/Classes/SwappingContainerView.html | 4 +- docs/Classes/SwappingContainerView/Axis.html | 4 +- .../SwappingContainerView/Distribution.html | 4 +- docs/Core.html | 4 +- .../CellLayoutContainerViewAlignment.html | 4 +- docs/Enums/ChatItemAlignment.html | 4 +- docs/Enums/ImageMaskedViewTransformation.html | 4 +- docs/Enums/InitialAttributesRequestType.html | 4 +- docs/Enums/ItemKind.html | 4 +- docs/Enums/ItemSize.html | 4 +- docs/Enums/ItemSize/CaseType.html | 4 +- docs/Extras.html | 4 +- docs/Other Guides.html | 4 +- docs/Protocols/ChatLayoutDelegate.html | 4 +- .../ContainerCollectionViewCellDelegate.html | 4 +- docs/Protocols/StaticViewFactory.html | 4 +- docs/Structs/ChatLayoutPositionSnapshot.html | 4 +- .../ChatLayoutPositionSnapshot/Edge.html | 4 +- docs/Structs/ChatLayoutSettings.html | 4 +- docs/Structs/VoidViewFactory.html | 4 +- .../Classes/CellLayoutContainerView.html | 4 +- .../Classes/ChatLayoutAttributes.html | 4 +- .../ChatLayoutInvalidationContext.html | 4 +- .../Classes/CollectionViewChatLayout.html | 35 ++++++++++++++++-- .../ContainerCollectionReusableView.html | 4 +- .../Classes/ContainerCollectionViewCell.html | 4 +- .../Documents/Classes/EdgeAligningView.html | 4 +- .../Classes/EdgeAligningView/Edge.html | 4 +- .../Documents/Classes/ImageMaskedView.html | 4 +- .../Classes/MessageContainerView.html | 4 +- .../Classes/RoundedCornersContainerView.html | 4 +- .../Classes/SwappingContainerView.html | 4 +- .../Classes/SwappingContainerView/Axis.html | 4 +- .../SwappingContainerView/Distribution.html | 4 +- .../Contents/Resources/Documents/Core.html | 4 +- .../CellLayoutContainerViewAlignment.html | 4 +- .../Documents/Enums/ChatItemAlignment.html | 4 +- .../Enums/ImageMaskedViewTransformation.html | 4 +- .../Enums/InitialAttributesRequestType.html | 4 +- .../Resources/Documents/Enums/ItemKind.html | 4 +- .../Resources/Documents/Enums/ItemSize.html | 4 +- .../Documents/Enums/ItemSize/CaseType.html | 4 +- .../Contents/Resources/Documents/Extras.html | 4 +- .../Resources/Documents/Other Guides.html | 4 +- .../Protocols/ChatLayoutDelegate.html | 4 +- .../ContainerCollectionViewCellDelegate.html | 4 +- .../Protocols/StaticViewFactory.html | 4 +- .../Structs/ChatLayoutPositionSnapshot.html | 4 +- .../ChatLayoutPositionSnapshot/Edge.html | 4 +- .../Documents/Structs/ChatLayoutSettings.html | 4 +- .../Documents/Structs/VoidViewFactory.html | 4 +- .../Contents/Resources/Documents/index.html | 4 +- .../Contents/Resources/Documents/readme.html | 4 +- .../Contents/Resources/Documents/search.json | 2 +- .../Contents/Resources/docSet.dsidx | Bin 73728 -> 73728 bytes docs/docsets/ChatLayout.tgz | Bin 124521 -> 124926 bytes docs/index.html | 4 +- docs/readme.html | 4 +- docs/search.json | 2 +- 76 files changed, 221 insertions(+), 144 deletions(-) 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 a767b6eb5668c7d4e571eec7f4077cf266c071dd..9879b17e2b4e0bb4aaeb562622d29859e2da98aa 100644 GIT binary patch delta 2587 zcmbVNd2~!!8o%GGx7T}BjBHhvk_C~-zF5YRq(m%1mQEj9TP86Ik;opg9En>oS`Q+8 zO?AYUh$TW3WgR1;(Wj@;LmNG4%NR?eTj*xa2%34-!x?|fIX!3IKlh&d-S<1+@ArMb z`z>f=7qqc87Wiz1ZxVdglGWhn6GjC2D$zcpaiZE^zN+q0!t@OWbea8+%dB=T;qt|8 zT%ER4@WH`F?jybP&pz6|3( zoW%)o8{%cCCE=uk7{4&q8Q(R$Wc}eb)05pwDqssU!?4xxp87<$PyIxluMSov-74iP z#i2XLE?~zgHeC+JM+GwE%nF+?8lzL;k2op%w94!yDjf;gvvW$)i?LTsyl~jY_4ZC< zuqMU>7aZkqaZDim0h?n6!y#;s8NnUY(%FaYLrU;;Vmv;H4TTfvALj?hF)_{}e45H7 zdyZ$E=@JZM$T3_R+Yj5KdJ0E_IICwY<9sE7pGaCWxnbVf+ASHZxG{{wEDh#}>v^1{ zSA5|PVgDqKVlzbs4T(`+>``)&O(SE-C{i?=_q5P)Ff}I+7gbT%fIrb{p^~>+>39Zh zC(B*8Y*QG$kV^E_8wxZn@&1ryOSAsGrG^K_mF_RyvQ#wc87m3i3cfhJ%2I8hhjN=spJ`tnd{hIsybLn5z0}Ko-pX{3S!GU01gE;3_2(@zC8Q#>x8W zhG&{twy6pFt0I-xNspxfQ7CDY2JC;xbnm z7Pib{NITwb*&;O&qGPQNfx*ki!*SpV!`n{@W_66fF?&x2|F0<{jf`}+WN>WETZQ_s z>@p|MDkQ7WvM&eau(jekRTIcWW}?s*Eafmena;2b449Y|z9LZ7^(=e~^=<1}RW1 z6Hf6Rd@9$(Zq+q2KQakW4<00Kh0P>W8;#~kj>%!cmX}>H{9H3c;iYp+g-D(ZFwuF= zdJB9c(@4z>WUR>{VdtwE?Mwe>tfw}+5_)gS^(W~+T{kJ z8&8tl@b&E;IJ~`DrZF^-CnMc?hF|f)>x({ODbN7SyRs1c@rNsi!4G#{rO*{4udUaf z>MyUY17FO$uH`<6T6mIeb$DYd?SAsYqJHt)UrMPT=3jk=ru=ZxyguU-? zz}5FQ;>f2C%;+fQv_AMP;EjjgSo6>e)rXJq%+o6P7_Yyqlbp0K?-q}Ft=<}TXCYaQ z%fGL{Z|)w(120PP>~p*8Sci5a?nM=b{`3fU1un$quthHAfj>wNBG4Wt$Jl=Ze0bqT zAZd1!QN$Et>|-cZcc?+iYQ;;RE2hYoZMrq zf$~Lpm7FPiNGGKtDMjig-WTh{O7S;hY)cU*iXn6eM|xNy@mXwlos}jzjoMI!!Olnt zEMRkvlpqxnoogiM2MNye5(GiK^O<`Yst=+JuVN1*aaTx8#kwM;LaYdvLDzUxvw4C-82=z2M#<|Bv zKRoR?$kH;}$N8lKPleu^TTPBocc?oas$MVCp)`&sKfm-DpPQYDMo^t?23QNR&WT3Y z#L^HNgVWA71-Z31itC86#W>1v#}K7{tA4CJQ;PKW^i$-A@=WQv=E8L?MdjlEJ4Icu O7M3y4;41sT4F3YdYGtGV delta 2220 zcmah~dvr}#8sFc!=Y7w)mq;Y{Ue^slkSDnzgS?~}?}X|q#!#WDq)Eli3)711t1K!+ zd^lc-NC**BoOY53l@x2uPz!Cf)GO!&ZDaa}Syhjkb4_PfJFBy1ueI0u?Qef;@BRJu zw|>9UHny~lUGIR?6}?j6bmN>FSI~zB>Z34(prv*OxROknpYL?{d`!8i|*ahWkRCkyxF$RW_X_ktCm3&seuxU$OjT zDr2&l22&hZnZe8h%U;WL^&y+29#WU8qg9CwRz6j{M*2O{t|XftVnTFZKbXz_(KzrI z124v;;dFN>e1xU$0dO2kqSK%i&qaTNbwd(_qsd%sU^;_S>izNgkWgsB(4nJ+=5btn z;4}s+QiE{S&@gDiz3!=S41?Wq+zI3GC_ML47-q+W!AaZ{<8prN-~t>jCM7RFb86uXJC{O6QDGh~T<6B5 zv5Jq&FkG=Rlr7=|9N0Xx05ei6p;CXInhqjWc&C#t0-UnSjtj?Zz|yx1AQclLJXk%x z50*?y!@rk^`s{JF!%{7!#1790JYz-EN=uNctFg)@WwH6W*<@MEtdVD1XGpiD$zr*f zBwQ7W_!E3FAIh!f2)h^>A)GXm-_v*utIcN%`2IHBRqN5Jg5ZMj;p-&2M4$mS?+iu@ zR-qrRuBJHWJr0kSxeV-&a+yE;8DRxgs{X5FEZsN~6E<04Nz;7?JY`^4Q)h3m1Kt|k z2HSA<;AME-?uRp1mtg68wNS5rTNYr#u*e))b<#;p=7Nm5x#%i83m@R+)pc;>$a?4& zYf#pmeL%$BVqak+|0Vx2cZ17iA6Sbl|4`20;Ka8N(ByBXk+5iY}b>SFO=&G-MQy~(IO31DZ_O&hEPoL&8c_#qw3 zXWG1ju)W@arPY#VwLm39bp6`?{@h5IMS{p0Vp_{N*c_IDh1M)ftED?xqi$DwDH|1k z^AU5L+#;t+1!9*NB4qGe`5xSI(*&lx!jq1DS}ywUg|A5uCryX^OixjEer7>R-U7Vd zTFgK_<~^z7_7TE7+;BV*%TxQ{;aeeC@}pbaMD2W(&C6lO;~?Bq93m9*AvT)A;I2<{ z8L~=GJZ=Mg{82W#`mWbQpIu?}S^7a1wxGFr5k73$2X$C^^Z@KZ+N_D&eez)=X(+S} zG^aB<69tFCO42Hl{bd?&+(a^*-aswN27|Fj*jko4sSQ1CJ0S?Ww=aW0tY}{@^yJAH zC!LQOolaCci&z>*1F-Sq7F{{@*c?5N7{r{hgsJV;Dfg+Uj~AQJantb_O$IM!|^-u2(@XRBu#*0~>B^Opp!A{n#8L zMhRa2d;SgX3}<0;tRBl{OSrm4Rg`k`7xL$Fth8DDikrmVXLC#sP5I0f=1u4XgPu9K zz2g*jm=IwRrrlYFum5d1Xn5{UzW&PnazHJzhO4C``1${*akBIgkB0(Ic+>!mnDb;m z?8D=Ck72{@YE*Am=|4RHkoMEzypLn%1<5s?+u#5u-7V2?cDVrO+-iUtebm}OleZw<_qSR<*V`xsZE+9o)gD6diset{?77Wy;xs}_#{nm?1 z?iC8fd=Cem26!Md5C8DppKwRVN$IfBhrR}5e(tbh*o=qzt_Xi&ePRc(&ajlLCzUhi z^X3)i(PkpI%lUF|=?Ce8q)B6?a7ht68a*F~;vkyBk^YV-%!}!l=%k}LVsnI~E-uW^ zDEQeD{G)UCCM2O=PIN}V5!Pnd_Q$HH7O_E>$KZ+w` z0yFTSd!jgzj^s$PZ6;=HwqsRvglQBVp#{p2!2gaThPC;eP0N#EAjD}~WEjm4=ZN8L zK5Nq+$q*q96UYlW{!KO3WCeOctky??N8r}%Dx4K!c=AHIru@bJZ{@0nq1s^!)b{p$ pmRUSctP3rj7C+UioKl9Hx0+eGL^>;;Z}c>Z|3fqNck1Fz{{${y>Gc2r diff --git a/docs/docsets/ChatLayout.tgz b/docs/docsets/ChatLayout.tgz index 14657e1536eb57a01581c835614d5fd7f3eea92d..1837864aae98bfba923cfb20c7962d3d1a578c2f 100644 GIT binary patch delta 121527 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

    Ir3735tN?LNm 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 delta 121125 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

    YXi{2>Ve>*u7;#at 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 Kl|^DFK>8ncNb;}% 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