summaryrefslogtreecommitdiff
path: root/Hutch/Views/Repositories/FileTreeView.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Hutch/Views/Repositories/FileTreeView.swift')
-rw-r--r--Hutch/Views/Repositories/FileTreeView.swift18
1 files changed, 17 insertions, 1 deletions
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
}