// // ComposeReplyView.swift // Tusker // // Created by Shadowfacts on 8/22/20. // Copyright © 2020 Shadowfacts. All rights reserved. // import SwiftUI struct ComposeReplyView: View { let status: StatusMO let stackPadding: CGFloat let outerMinY: CGFloat @State private var contentHeight: CGFloat? @ObservedObject private var preferences = Preferences.shared private let horizSpacing: CGFloat = 8 var body: some View { HStack(alignment: .top, spacing: horizSpacing) { GeometryReader(content: self.replyAvatarImage) .frame(width: 50) VStack(alignment: .leading, spacing: 0) { HStack { AccountDisplayNameLabel(account: status.account, fontSize: 17) .lineLimit(1) .layoutPriority(1) Text(verbatim: "@\(status.account.acct)") .font(.system(size: 17, weight: .light)) .foregroundColor(.secondary) .lineLimit(1) Spacer() } ComposeReplyContentView(status: status) { (newHeight) in self.contentHeight = newHeight } .frame(height: contentHeight) .offset(x: -4, y: -8) .padding(.bottom, -8) } .frame(minHeight: 50 + 8) } .padding(.bottom, -8) } private func replyAvatarImage(geometry: GeometryProxy) -> some View { // using named coordinate spaces produces an incorrect scroll offset on iOS 13, // so simply compare the geometry inside and outside the scroll view in the global coordinate space var scrollOffset = outerMinY - geometry.frame(in: .global).minY scrollOffset += stackPadding let offset = min(max(scrollOffset, 0), geometry.size.height - 50 - stackPadding) return ComposeAvatarImageView(url: status.account.avatar) .frame(width: 50, height: 50) .cornerRadius(preferences.avatarStyle.cornerRadiusFraction * 50) .offset(x: 0, y: offset) } } //struct ComposeReplyView_Previews: PreviewProvider { // static var previews: some View { // ComposeReplyView() // } //}