mirror of
https://github.com/writeas/writefreely-swiftui-multiplatform.git
synced 2024-11-15 01:11:02 +00:00
Add (dynamic) line spacing back to post body editor
This commit is contained in:
parent
61cc9464c0
commit
3134965b2c
@ -34,7 +34,20 @@ class PostBodyCoordinator: NSObject, UITextViewDelegate, NSLayoutManagerDelegate
|
||||
lineSpacingAfterGlyphAt glyphIndex: Int,
|
||||
withProposedLineFragmentRect rect: CGRect
|
||||
) -> CGFloat {
|
||||
return 17 * lineSpacingMultiplier
|
||||
// HACK: - This seems to be the only way to get line spacing to update dynamically on iPad
|
||||
// when switching between full-screen, split-screen, and slide-over views.
|
||||
if let window = UIApplication.shared.windows.filter({ $0.isKeyWindow }).first {
|
||||
// Get the width of the window to determine the size class
|
||||
if window.frame.width < 600 {
|
||||
// Use 0.25 multiplier for compact size class
|
||||
return 17 * 0.25
|
||||
} else {
|
||||
// Use 0.5 multiplier otherwise
|
||||
return 17 * 0.5
|
||||
}
|
||||
} else {
|
||||
return 17 * lineSpacingMultiplier
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -42,7 +55,7 @@ struct PostBodyTextView: UIViewRepresentable {
|
||||
@Binding var text: String
|
||||
@Binding var textStyle: UIFont
|
||||
@Binding var isFirstResponder: Bool
|
||||
var lineSpacing: CGFloat
|
||||
@State var lineSpacing: CGFloat
|
||||
|
||||
func makeUIView(context: UIViewRepresentableContext<PostBodyTextView>) -> UITextView {
|
||||
let textView = UITextView(frame: .zero)
|
||||
|
@ -3,7 +3,6 @@ import SwiftUI
|
||||
struct PostEditorView: View {
|
||||
@EnvironmentObject var model: WriteFreelyModel
|
||||
@Environment(\.managedObjectContext) var moc
|
||||
@Environment(\.horizontalSizeClass) var horizontalSizeClass
|
||||
@Environment(\.presentationMode) var presentationMode
|
||||
|
||||
@ObservedObject var post: WFAPost
|
||||
|
@ -11,7 +11,7 @@ struct PostTextEditingView: View {
|
||||
@State private var titleIsFirstResponder: Bool = true
|
||||
@State private var bodyTextStyle: UIFont = UIFont(name: "Lora-Regular", size: 17)!
|
||||
@State private var bodyIsFirstResponder: Bool = false
|
||||
private let bodyLineSpacingMultiplier: CGFloat = 0.5
|
||||
private let lineSpacingMultiplier: CGFloat = 0.5
|
||||
|
||||
init(
|
||||
post: ObservedObject<WFAPost>,
|
||||
@ -70,9 +70,7 @@ struct PostTextEditingView: View {
|
||||
text: $post.body,
|
||||
textStyle: $bodyTextStyle,
|
||||
isFirstResponder: $bodyIsFirstResponder,
|
||||
lineSpacing: horizontalSizeClass == .compact
|
||||
? bodyLineSpacingMultiplier / 2
|
||||
: bodyLineSpacingMultiplier
|
||||
lineSpacing: horizontalSizeClass == .compact ? lineSpacingMultiplier / 2 : lineSpacingMultiplier
|
||||
)
|
||||
.onChange(of: post.body) { _ in
|
||||
if post.status == PostStatus.published.rawValue && !updatingBodyFromServer {
|
||||
|
@ -1,5 +1,4 @@
|
||||
// Based on https://lostmoa.com/blog/DynamicHeightForTextFieldInSwiftUI/
|
||||
// and https://stackoverflow.com/a/56508132/1234545
|
||||
// Based on https://lostmoa.com/blog/DynamicHeightForTextFieldInSwiftUI and https://stackoverflow.com/a/56508132/1234545
|
||||
|
||||
import SwiftUI
|
||||
|
||||
@ -37,9 +36,7 @@ class PostTitleCoordinator: NSObject, UITextViewDelegate, NSLayoutManagerDelegat
|
||||
atEnd layoutFinishedFlag: Bool
|
||||
) {
|
||||
DispatchQueue.main.async {
|
||||
guard let view = self.textView else {
|
||||
return
|
||||
}
|
||||
guard let view = self.textView else { return }
|
||||
let size = view.sizeThatFits(view.bounds.size)
|
||||
if self.postTitleTextView.height != size.height {
|
||||
self.postTitleTextView.height = size.height
|
||||
|
Loading…
Reference in New Issue
Block a user