Fix media page title view on iOS9/10

We must specify the frame of the titleView

Previously the titleView was the stackview, but we don't want to
"stretch" the labels to fit the size of the stack view, so we wrap the
stack view in a container view which becomes the new titleView.

// FREEBIE
pull/1/head
Michael Kirk 7 years ago
parent ed7fe90e15
commit b32a1d5076

@ -67,7 +67,7 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
private let showAllMediaButton: Bool private let showAllMediaButton: Bool
private let sliderEnabled: Bool private let sliderEnabled: Bool
private let headerView: UIStackView private let headerView: UIView
init(initialItem: MediaGalleryItem, mediaGalleryDataSource: MediaGalleryDataSource, uiDatabaseConnection: YapDatabaseConnection, options: MediaGalleryOption) { init(initialItem: MediaGalleryItem, mediaGalleryDataSource: MediaGalleryDataSource, uiDatabaseConnection: YapDatabaseConnection, options: MediaGalleryOption) {
assert(uiDatabaseConnection.isInLongLivedReadTransaction()) assert(uiDatabaseConnection.isInLongLivedReadTransaction())
@ -78,20 +78,29 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
let kSpacingBetweenItems: CGFloat = 20 let kSpacingBetweenItems: CGFloat = 20
let headerView = UIStackView() self.headerView = UIView()
self.headerView = headerView headerView.layoutMargins = UIEdgeInsets(top: 2, left: 8, bottom: 4, right: 8)
super.init(transitionStyle: .scroll, super.init(transitionStyle: .scroll,
navigationOrientation: .horizontal, navigationOrientation: .horizontal,
options: [UIPageViewControllerOptionInterPageSpacingKey: kSpacingBetweenItems]) options: [UIPageViewControllerOptionInterPageSpacingKey: kSpacingBetweenItems])
// needed for proper layout on iOS9/10 let headerStackView = UIStackView()
headerView.translatesAutoresizingMaskIntoConstraints = false headerView.addSubview(headerStackView)
headerView.axis = .vertical headerStackView.axis = .vertical
headerView.alignment = .center headerStackView.alignment = .center
headerView.addArrangedSubview(headerNameLabel) headerStackView.spacing = 0
headerView.addArrangedSubview(headerDateLabel) headerStackView.distribution = .fillProportionally
headerStackView.addArrangedSubview(headerNameLabel)
headerStackView.addArrangedSubview(headerDateLabel)
headerStackView.autoPinEdge(toSuperviewMargin: .top, relation: .greaterThanOrEqual)
headerStackView.autoPinEdge(toSuperviewMargin: .right, relation: .greaterThanOrEqual)
headerStackView.autoPinEdge(toSuperviewMargin: .bottom, relation: .greaterThanOrEqual)
headerStackView.autoPinEdge(toSuperviewMargin: .left, relation: .greaterThanOrEqual)
headerStackView.setContentHuggingHigh()
headerStackView.autoCenterInSuperview()
self.dataSource = self self.dataSource = self
self.delegate = self self.delegate = self
@ -589,6 +598,7 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
label.font = UIFont.ows_regularFont(withSize: 12) label.font = UIFont.ows_regularFont(withSize: 12)
label.textAlignment = .center label.textAlignment = .center
label.adjustsFontSizeToFitWidth = true label.adjustsFontSizeToFitWidth = true
label.minimumScaleFactor = 0.8
return label return label
}() }()
@ -609,5 +619,19 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
let date = Date(timeIntervalSince1970: Double(item.message.timestamp) / 1000) let date = Date(timeIntervalSince1970: Double(item.message.timestamp) / 1000)
let formattedDate = dateFormatter.string(from: date) let formattedDate = dateFormatter.string(from: date)
headerDateLabel.text = formattedDate headerDateLabel.text = formattedDate
if #available(iOS 11, *) {
// Do nothing, on iOS11, autolayout grows the stack view as necessary.
} else {
// Size the titleView to be large enough to fit the widest label,
// but no larger. If we go for a "full width" label, our title view
// will not be centered (since the left and right bar buttons have different widths)
headerNameLabel.sizeToFit()
headerDateLabel.sizeToFit()
let maxWidth = max(headerNameLabel.frame.width, headerDateLabel.frame.width)
let headerFrame: CGRect = CGRect(x: 0, y: 0, width: maxWidth, height: 44)
headerView.frame = headerFrame
}
} }
} }

Loading…
Cancel
Save