diff --git a/Mastodon/Scene/Profile/Header/View/ProfileHeaderView.swift b/Mastodon/Scene/Profile/Header/View/ProfileHeaderView.swift index 6f4fe170b..78430cb36 100644 --- a/Mastodon/Scene/Profile/Header/View/ProfileHeaderView.swift +++ b/Mastodon/Scene/Profile/Header/View/ProfileHeaderView.swift @@ -250,7 +250,7 @@ extension ProfileHeaderView { avatarImageViewBackgroundView.translatesAutoresizingMaskIntoConstraints = false addSubview(avatarImageViewBackgroundView) NSLayoutConstraint.activate([ - avatarImageViewBackgroundView.leadingAnchor.constraint(equalToSystemSpacingAfter: bannerContainerView.leadingAnchor, multiplier: 2.0), + avatarImageViewBackgroundView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor), // align to dashboardContainer bottom ]) @@ -306,8 +306,8 @@ extension ProfileHeaderView { addSubview(container) NSLayoutConstraint.activate([ container.topAnchor.constraint(equalTo: bannerContainerView.bottomAnchor), - container.leadingAnchor.constraint(equalToSystemSpacingAfter: leadingAnchor, multiplier: 2.0), - trailingAnchor.constraint(equalToSystemSpacingAfter: container.trailingAnchor, multiplier: 2.0), + container.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor), + layoutMarginsGuide.trailingAnchor.constraint(equalTo: container.trailingAnchor), container.bottomAnchor.constraint(equalTo: bottomAnchor), ]) @@ -401,10 +401,37 @@ extension ProfileHeaderView { relationshipActionButton.addTarget(self, action: #selector(ProfileHeaderView.relationshipActionButtonDidPressed(_:)), for: .touchUpInside) configure(state: .normal) + + updateLayoutMargins() + } + + override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { + super.traitCollectionDidChange(previousTraitCollection) + + updateLayoutMargins() } } +extension ProfileHeaderView { + private func updateLayoutMargins() { + let margin: CGFloat = { + switch traitCollection.userInterfaceIdiom { + case .phone: + return ProfileViewController.containerViewMarginForCompactHorizontalSizeClass + default: + return traitCollection.horizontalSizeClass == .regular ? + ProfileViewController.containerViewMarginForRegularHorizontalSizeClass : + ProfileViewController.containerViewMarginForCompactHorizontalSizeClass + } + }() + + layoutMargins.left = margin + layoutMargins.right = margin + } + +} + extension ProfileHeaderView { enum State { case normal diff --git a/Mastodon/Scene/Profile/ProfileViewController.swift b/Mastodon/Scene/Profile/ProfileViewController.swift index 826aaba52..a890505ef 100644 --- a/Mastodon/Scene/Profile/ProfileViewController.swift +++ b/Mastodon/Scene/Profile/ProfileViewController.swift @@ -22,6 +22,9 @@ protocol ProfileViewModelEditable { final class ProfileViewController: UIViewController, NeedsDependency, MediaPreviewableViewController { + public static let containerViewMarginForRegularHorizontalSizeClass: CGFloat = 64 + public static let containerViewMarginForCompactHorizontalSizeClass: CGFloat = 16 + let logger = Logger(subsystem: "ProfileViewController", category: "ViewController") weak var context: AppContext! { willSet { precondition(!isViewLoaded) } } @@ -279,13 +282,14 @@ extension ProfileViewController { self.profileHeaderViewController.view.addSubview(buttonBar) NSLayoutConstraint.activate([ buttonBar.topAnchor.constraint(equalTo: self.profileHeaderViewController.profileHeaderView.bottomAnchor), - buttonBar.leadingAnchor.constraint(equalToSystemSpacingAfter: self.profileHeaderViewController.view.leadingAnchor, multiplier: 2.0), - buttonBar.trailingAnchor.constraint(equalTo: self.profileHeaderViewController.view.layoutMarginsGuide.trailingAnchor), + buttonBar.leadingAnchor.constraint(equalTo: self.profileHeaderViewController.view.leadingAnchor), + buttonBar.trailingAnchor.constraint(equalTo: self.profileHeaderViewController.view.trailingAnchor), buttonBar.bottomAnchor.constraint(equalTo: self.profileHeaderViewController.view.bottomAnchor), buttonBar.heightAnchor.constraint(equalToConstant: ProfileHeaderViewController.segmentedControlHeight).priority(.required - 1), ]) }) ) + updateBarButtonInsets() overlayScrollView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(overlayScrollView) @@ -389,6 +393,31 @@ extension ProfileViewController { currentPostTimelineTableViewContentSizeObservation = nil } + override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { + super.traitCollectionDidChange(previousTraitCollection) + + updateBarButtonInsets() + } + +} + +extension ProfileViewController { + private func updateBarButtonInsets() { + let margin: CGFloat = { + switch traitCollection.userInterfaceIdiom { + case .phone: + return ProfileViewController.containerViewMarginForCompactHorizontalSizeClass + default: + return traitCollection.horizontalSizeClass == .regular ? + ProfileViewController.containerViewMarginForRegularHorizontalSizeClass : + ProfileViewController.containerViewMarginForCompactHorizontalSizeClass + } + }() + + profileHeaderViewController.buttonBar.layout.contentInset.left = margin + profileHeaderViewController.buttonBar.layout.contentInset.right = margin + } + } extension ProfileViewController { diff --git a/MastodonSDK/Sources/MastodonUI/Protocol/AdaptiveMarginStatusTableViewCell.swift b/MastodonSDK/Sources/MastodonUI/Protocol/AdaptiveMarginStatusTableViewCell.swift index b552816b2..0ac9342af 100644 --- a/MastodonSDK/Sources/MastodonUI/Protocol/AdaptiveMarginStatusTableViewCell.swift +++ b/MastodonSDK/Sources/MastodonUI/Protocol/AdaptiveMarginStatusTableViewCell.swift @@ -30,8 +30,8 @@ extension AdaptiveContainerMarginTableViewCell { public func updateContainerViewMarginConstraints() { func setupContainerForPhone() { - containerView.updateContainerViewComponentsLayoutMarginsRelativeArrangementBehavior(isEnabled: true) // add inner margin for phone - containerViewLeadingLayoutConstraint.constant = 0 // remove outer margin for phone + containerView.updateContainerViewComponentsLayoutMarginsRelativeArrangementBehavior(isEnabled: true) // add inner margin for phone + containerViewLeadingLayoutConstraint.constant = 0 // remove outer margin for phone containerViewTrailingLayoutConstraint.constant = 0 } @@ -43,7 +43,7 @@ extension AdaptiveContainerMarginTableViewCell { setupContainerForPhone() return } - containerView.updateContainerViewComponentsLayoutMarginsRelativeArrangementBehavior(isEnabled: false) // remove margin for iPad + containerView.updateContainerViewComponentsLayoutMarginsRelativeArrangementBehavior(isEnabled: false) // remove margin for iPad containerViewLeadingLayoutConstraint.constant = Self.containerViewMarginForRegularHorizontalSizeClass // add outer margin for iPad containerViewTrailingLayoutConstraint.constant = Self.containerViewMarginForRegularHorizontalSizeClass }