diff options
Diffstat (limited to 'Hutch/Views/Repositories')
| -rw-r--r-- | Hutch/Views/Repositories/DiffView.swift | 10 | ||||
| -rw-r--r-- | Hutch/Views/Repositories/FileTreeView.swift | 18 |
2 files changed, 23 insertions, 5 deletions
diff --git a/Hutch/Views/Repositories/DiffView.swift b/Hutch/Views/Repositories/DiffView.swift index 4b8e512..a370dfb 100644 --- a/Hutch/Views/Repositories/DiffView.swift +++ b/Hutch/Views/Repositories/DiffView.swift @@ -76,13 +76,15 @@ private struct DiffBlockView: View { let lines: [String] var body: some View { - VStack(alignment: .leading, spacing: 0) { - ForEach(Array(lines.enumerated()), id: \.offset) { _, line in - DiffLineView(line: line) + ScrollView(.horizontal, showsIndicators: false) { + LazyVStack(alignment: .leading, spacing: 0) { + ForEach(Array(lines.enumerated()), id: \.offset) { _, line in + DiffLineView(line: line) + } } + .frame(minWidth: 0, maxWidth: .infinity, alignment: .leading) } .font(.system(.caption, design: .monospaced)) - .frame(maxWidth: .infinity, alignment: .leading) .background(Color(.secondarySystemBackground)) } } diff --git a/Hutch/Views/Repositories/FileTreeView.swift b/Hutch/Views/Repositories/FileTreeView.swift index 8bedb73..adacb2e 100644 --- a/Hutch/Views/Repositories/FileTreeView.swift +++ b/Hutch/Views/Repositories/FileTreeView.swift @@ -441,6 +441,7 @@ private final class CodeFileUIView: UIView { private let codeStackView = UIStackView() private var codeContainerWidthConstraint: NSLayoutConstraint? + private var codeContainerExplicitWidthConstraint: NSLayoutConstraint? private var gutterWidthConstraint: NSLayoutConstraint? private var rows: [LineRow] = [] @@ -524,6 +525,7 @@ private final class CodeFileUIView: UIView { codeContainerView.addSubview(codeStackView) codeContainerWidthConstraint = codeContainerView.widthAnchor.constraint(equalTo: horizontalScrollView.frameLayoutGuide.widthAnchor) + codeContainerExplicitWidthConstraint = codeContainerView.widthAnchor.constraint(equalToConstant: 0) gutterWidthConstraint = gutterContainerView.widthAnchor.constraint(equalToConstant: 0) NSLayoutConstraint.activate([ @@ -627,12 +629,14 @@ private final class CodeFileUIView: UIView { private func updateWrapConfiguration(resetHorizontalOffset: Bool) { horizontalScrollView.alwaysBounceHorizontal = !wrapLines - horizontalScrollView.isScrollEnabled = true + horizontalScrollView.isScrollEnabled = !wrapLines if wrapLines { codeContainerWidthConstraint?.isActive = true + codeContainerExplicitWidthConstraint?.isActive = false } else { codeContainerWidthConstraint?.isActive = false + codeContainerExplicitWidthConstraint?.isActive = true } for row in rows { @@ -664,6 +668,18 @@ private final class CodeFileUIView: UIView { row.codeHeightConstraint.constant = rowHeight } + if wrapLines { + codeContainerExplicitWidthConstraint?.constant = 0 + } else { + let maxLineWidth = rows.reduce(CGFloat(0)) { partialResult, row in + let measuredWidth = row.codeLabel.sizeThatFits( + CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude) + ).width + return max(partialResult, ceil(measuredWidth)) + } + codeContainerExplicitWidthConstraint?.constant = max(maxLineWidth, availableWidth) + } + needsLineLayoutUpdate = false } |
