diff --git a/Aztec/Classes/TextKit/MediaAttachment.swift b/Aztec/Classes/TextKit/MediaAttachment.swift index a25d2e2d4..4e272b1d6 100644 --- a/Aztec/Classes/TextKit/MediaAttachment.swift +++ b/Aztec/Classes/TextKit/MediaAttachment.swift @@ -33,7 +33,7 @@ open class MediaAttachment: NSTextAttachment { /// Identifier used to match this attachment with a custom UIView subclass /// private(set) open var identifier = String() - + /// Attachment URL /// fileprivate(set) public var url: URL? @@ -204,7 +204,7 @@ open class MediaAttachment: NSTextAttachment { // MARK: - NSTextAttachmentContainer override open func image(forBounds imageBounds: CGRect, textContainer: NSTextContainer?, characterIndex charIndex: Int) -> UIImage? { - + ensureImageIsUpToDate(in: textContainer) guard let image = image else { @@ -223,7 +223,7 @@ open class MediaAttachment: NSTextAttachment { func mediaBounds(for bounds: CGRect) -> CGRect { let containerWidth = bounds.size.width let origin = CGPoint(x: xPosition(forContainerWidth: bounds.size.width), y: appearance.imageMargin) - let size = CGSize(width: onScreenWidth(containerWidth), height: onScreenHeight(containerWidth) - appearance.imageMargin) + let size = CGSize(width: onScreenWidth(containerWidth), height: onScreenHeight(containerWidth) - appearance.imageMargin * 2) return CGRect(origin: origin, size: size) } @@ -321,22 +321,31 @@ open class MediaAttachment: NSTextAttachment { /// Otherwise, we'll always take the whole container's width. /// override open func attachmentBounds(for textContainer: NSTextContainer?, proposedLineFragment lineFrag: CGRect, glyphPosition position: CGPoint, characterIndex charIndex: Int) -> CGRect { - + ensureImageIsUpToDate(in: textContainer) - + if image == nil { return .zero } - var padding = (textContainer?.lineFragmentPadding ?? 0) + var padding = (textContainer?.lineFragmentPadding ?? 0) * 2 if let storage = textContainer?.layoutManager?.textStorage, let paragraphStyle = storage.attribute(.paragraphStyle, at: charIndex, effectiveRange: nil) as? NSParagraphStyle { - padding += paragraphStyle.firstLineHeadIndent + paragraphStyle.tailIndent + let attachmentString = storage.attributedSubstring(from: NSMakeRange(charIndex, 1)).string + let headIndent = storage.string.isStartOfParagraph(at: attachmentString.startIndex) ? paragraphStyle.firstLineHeadIndent : paragraphStyle.headIndent + + padding += headIndent + + if paragraphStyle.tailIndent > 0 { + padding += lineFrag.width - headIndent - paragraphStyle.tailIndent + } else if paragraphStyle.tailIndent < 0 { + padding -= paragraphStyle.tailIndent + } } - let width = floor(lineFrag.width - (padding * 2)) + let width = floor(lineFrag.width - padding) let size = CGSize(width: width, height: onScreenHeight(width)) - + return CGRect(origin: CGPoint.zero, size: size) } } @@ -384,7 +393,6 @@ private extension MediaAttachment { self.invalidateLayout(in: textContainer) }, onFailure: { [weak self] () in - self?.isFetchingImage = false }) } @@ -479,3 +487,4 @@ extension MediaAttachment { public var imageMargin = CGFloat(10.0) } } +