diff --git a/Simplenote.xcodeproj/project.pbxproj b/Simplenote.xcodeproj/project.pbxproj
index fe39dec84..d74bfac6e 100644
--- a/Simplenote.xcodeproj/project.pbxproj
+++ b/Simplenote.xcodeproj/project.pbxproj
@@ -540,6 +540,7 @@
 		BAB6C04526BA4A04007495C4 /* String+Simplenote.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5476BC023D8E5D0000E7723 /* String+Simplenote.swift */; };
 		BAB6C04726BA4CAF007495C4 /* WidgetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAB6C04626BA4CAF007495C4 /* WidgetController.swift */; };
 		BAB898D32BEC404200E238B8 /* CreateNewNoteIntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAB898D22BEC404200E238B8 /* CreateNewNoteIntentHandler.swift */; };
+		BABB22DF2D14DA6600FCF47D /* SPTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BABB22DE2D14DA6300FCF47D /* SPTextView.swift */; };
 		BABFFF2226CF9094003A4C25 /* WidgetDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = BABFFF2126CF9094003A4C25 /* WidgetDefaults.swift */; };
 		BABFFF2326CF9094003A4C25 /* WidgetDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = BABFFF2126CF9094003A4C25 /* WidgetDefaults.swift */; };
 		BABFFF2426CF9094003A4C25 /* WidgetDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = BABFFF2126CF9094003A4C25 /* WidgetDefaults.swift */; };
@@ -1242,6 +1243,7 @@
 		BAB576BD2670512C00B0C56F /* NoteWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteWidget.swift; sourceTree = "<group>"; };
 		BAB6C04626BA4CAF007495C4 /* WidgetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetController.swift; sourceTree = "<group>"; };
 		BAB898D22BEC404200E238B8 /* CreateNewNoteIntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateNewNoteIntentHandler.swift; sourceTree = "<group>"; };
+		BABB22DE2D14DA6300FCF47D /* SPTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SPTextView.swift; sourceTree = "<group>"; };
 		BABFFF2126CF9094003A4C25 /* WidgetDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetDefaults.swift; sourceTree = "<group>"; };
 		BAD0F1EC2BED49C200E73E45 /* FindNoteIntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindNoteIntentHandler.swift; sourceTree = "<group>"; };
 		BAE08625261282D1009D40CD /* Note+Publish.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Note+Publish.swift"; sourceTree = "<group>"; };
@@ -1872,6 +1874,7 @@
 			children = (
 				B5E3F3972539F1E900271AEA /* SPTextView.h */,
 				B5E3F3962539F1E900271AEA /* SPTextView.m */,
+				BABB22DE2D14DA6300FCF47D /* SPTextView.swift */,
 				E21F57B717C1244E001F02D3 /* SPEditorTextView.h */,
 				E21F57B817C1244E001F02D3 /* SPEditorTextView.m */,
 				A6BBDA45255034E6005C8343 /* SPEditorTextView+Simplenote.swift */,
@@ -3562,6 +3565,7 @@
 				B53C5A5A230330CD00DA2143 /* SPNoteListViewController+Extensions.swift in Sources */,
 				A6C0DFB525C1581D00B9BE39 /* UIScrollView+Simplenote.swift in Sources */,
 				375D24B621E01131007AB25A /* html_blocks.c in Sources */,
+				BABB22DF2D14DA6600FCF47D /* SPTextView.swift in Sources */,
 				46A3C98217DFA81A002865AE /* NSString+Attributed.m in Sources */,
 				375D24BA21E01131007AB25A /* document.c in Sources */,
 				BA6DA19126DB5F1B000464C8 /* URLComponents.swift in Sources */,
diff --git a/Simplenote/Classes/SPTextView.m b/Simplenote/Classes/SPTextView.m
index e92c4a28f..f7777054b 100644
--- a/Simplenote/Classes/SPTextView.m
+++ b/Simplenote/Classes/SPTextView.m
@@ -22,14 +22,9 @@ @implementation SPTextView
 - (instancetype)init {
     
     SPInteractiveTextStorage *textStorage = [[SPInteractiveTextStorage alloc] init];
-    NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
-    
-    NSTextContainer *container = [[NSTextContainer alloc] initWithSize:CGSizeMake(0, CGFLOAT_MAX)];
-    container.widthTracksTextView = YES;
-    container.heightTracksTextView = YES;
-    [layoutManager addTextContainer:container];
-    [textStorage addLayoutManager:layoutManager];
     
+    NSTextContainer *container = [self setupTextContainerWith:textStorage];
+
     self = [super initWithFrame:CGRectZero textContainer:container];
     if (self) {
         self.interactiveTextStorage = textStorage;
diff --git a/Simplenote/SPTextView.swift b/Simplenote/SPTextView.swift
new file mode 100644
index 000000000..86101ee0f
--- /dev/null
+++ b/Simplenote/SPTextView.swift
@@ -0,0 +1,41 @@
+//
+//  SPTextView.swift
+//  Simplenote
+//
+//  Created by Charlie Scheer on 12/19/24.
+//  Copyright © 2024 Automattic. All rights reserved.
+//
+
+extension SPTextView {
+    /*
+     SPInteractiveTextStorage *textStorage = [[SPInteractiveTextStorage alloc] init];
+     NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
+
+     NSTextContainer *container = [[NSTextContainer alloc] initWithSize:CGSizeMake(0, CGFLOAT_MAX)];
+     container.widthTracksTextView = YES;
+     container.heightTracksTextView = YES;
+     [layoutManager addTextContainer:container];
+     [textStorage addLayoutManager:layoutManager];
+     */
+
+    @objc
+    func setupTextContainer(with textStorage: SPInteractiveTextStorage) -> NSTextContainer {
+        let container = NSTextContainer(size: .zero)
+        container.widthTracksTextView = true
+        container.heightTracksTextView = true
+
+
+        if #available(iOS 16.0, *) {
+            let textLayoutManager = NSTextLayoutManager()
+            let contentStorage = NSTextContentStorage()
+            contentStorage.addTextLayoutManager(textLayoutManager)
+            textLayoutManager.textContainer = container
+
+        } else {
+            layoutManager.addTextContainer(container)
+            textStorage.addLayoutManager(layoutManager)
+        }
+
+        return container
+    }
+}