From ed92d74aa24c199de517161bb09238aa72796971 Mon Sep 17 00:00:00 2001 From: Rajdeep Kwatra Date: Fri, 14 Apr 2023 19:51:39 +1000 Subject: [PATCH] (#168) Fixed editor placeholder on change of insets (#169) --- Proton/Sources/Swift/Core/RichTextView.swift | 12 ++++++++++++ Proton/Tests/Editor/EditorSnapshotTests.swift | 16 ++++++++++++++++ .../testUpdatesPlaceholderWithInsets.1.png | Bin 0 -> 9996 bytes 3 files changed, 28 insertions(+) create mode 100644 Proton/Tests/Editor/__Snapshots__/EditorSnapshotTests/testUpdatesPlaceholderWithInsets.1.png diff --git a/Proton/Sources/Swift/Core/RichTextView.swift b/Proton/Sources/Swift/Core/RichTextView.swift index d2f237c2..c624a0ed 100644 --- a/Proton/Sources/Swift/Core/RichTextView.swift +++ b/Proton/Sources/Swift/Core/RichTextView.swift @@ -78,6 +78,18 @@ class RichTextView: AutogrowingTextView { } } + override var contentInset: UIEdgeInsets { + didSet { + updatePlaceholderVisibility() + } + } + + override var textContainerInset: UIEdgeInsets { + didSet { + updatePlaceholderVisibility() + } + } + private func adjustedTextBlockRangeOnSelectionChange(oldRange: NSRange?, newRange: NSRange?) -> NSRange? { guard let old = oldRange, let new = newRange, diff --git a/Proton/Tests/Editor/EditorSnapshotTests.swift b/Proton/Tests/Editor/EditorSnapshotTests.swift index 334a28b8..cfe1d2f6 100644 --- a/Proton/Tests/Editor/EditorSnapshotTests.swift +++ b/Proton/Tests/Editor/EditorSnapshotTests.swift @@ -41,6 +41,22 @@ class EditorSnapshotTests: SnapshotTestCase { assertSnapshot(matching: viewController.view, as: .image, record: recordMode) } + func testUpdatesPlaceholderWithInsets() { + let viewController = EditorTestViewController() + let editor = viewController.editor + editor.contentInset = .zero + editor.textContainerInset = .zero + let font = UIFont(name: "Verdana", size: 17) ?? UIFont() + let placeholderString = NSMutableAttributedString(string: "Placeholder text", attributes: [ + NSAttributedString.Key.font: font, + NSAttributedString.Key.foregroundColor: UIColor.lightGray + ]) + + editor.placeholderText = placeholderString + viewController.render(size: CGSize(width: 300, height: 60)) + assertSnapshot(matching: viewController.view, as: .image, record: recordMode) + } + func testRendersMatchContentAttachment() { let viewController = EditorTestViewController() let editor = viewController.editor diff --git a/Proton/Tests/Editor/__Snapshots__/EditorSnapshotTests/testUpdatesPlaceholderWithInsets.1.png b/Proton/Tests/Editor/__Snapshots__/EditorSnapshotTests/testUpdatesPlaceholderWithInsets.1.png new file mode 100644 index 0000000000000000000000000000000000000000..911db3f7ddbaab85a3a34fef11e7dd8e46dc6078 GIT binary patch literal 9996 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 literal 0 HcmV?d00001