2
2
mirror of https://github.com/mastodon/mastodon-ios synced 2025-04-11 22:58:02 +02:00

chore: update profile header and segmented bar margin

This commit is contained in:
CMK 2022-02-18 18:55:26 +08:00
parent 78fc34c08d
commit 8e880326eb
3 changed files with 64 additions and 8 deletions

View File

@ -250,7 +250,7 @@ extension ProfileHeaderView {
avatarImageViewBackgroundView.translatesAutoresizingMaskIntoConstraints = false avatarImageViewBackgroundView.translatesAutoresizingMaskIntoConstraints = false
addSubview(avatarImageViewBackgroundView) addSubview(avatarImageViewBackgroundView)
NSLayoutConstraint.activate([ NSLayoutConstraint.activate([
avatarImageViewBackgroundView.leadingAnchor.constraint(equalToSystemSpacingAfter: bannerContainerView.leadingAnchor, multiplier: 2.0), avatarImageViewBackgroundView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor),
// align to dashboardContainer bottom // align to dashboardContainer bottom
]) ])
@ -306,8 +306,8 @@ extension ProfileHeaderView {
addSubview(container) addSubview(container)
NSLayoutConstraint.activate([ NSLayoutConstraint.activate([
container.topAnchor.constraint(equalTo: bannerContainerView.bottomAnchor), container.topAnchor.constraint(equalTo: bannerContainerView.bottomAnchor),
container.leadingAnchor.constraint(equalToSystemSpacingAfter: leadingAnchor, multiplier: 2.0), container.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor),
trailingAnchor.constraint(equalToSystemSpacingAfter: container.trailingAnchor, multiplier: 2.0), layoutMarginsGuide.trailingAnchor.constraint(equalTo: container.trailingAnchor),
container.bottomAnchor.constraint(equalTo: bottomAnchor), container.bottomAnchor.constraint(equalTo: bottomAnchor),
]) ])
@ -401,10 +401,37 @@ extension ProfileHeaderView {
relationshipActionButton.addTarget(self, action: #selector(ProfileHeaderView.relationshipActionButtonDidPressed(_:)), for: .touchUpInside) relationshipActionButton.addTarget(self, action: #selector(ProfileHeaderView.relationshipActionButtonDidPressed(_:)), for: .touchUpInside)
configure(state: .normal) 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 { extension ProfileHeaderView {
enum State { enum State {
case normal case normal

View File

@ -22,6 +22,9 @@ protocol ProfileViewModelEditable {
final class ProfileViewController: UIViewController, NeedsDependency, MediaPreviewableViewController { 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") let logger = Logger(subsystem: "ProfileViewController", category: "ViewController")
weak var context: AppContext! { willSet { precondition(!isViewLoaded) } } weak var context: AppContext! { willSet { precondition(!isViewLoaded) } }
@ -279,13 +282,14 @@ extension ProfileViewController {
self.profileHeaderViewController.view.addSubview(buttonBar) self.profileHeaderViewController.view.addSubview(buttonBar)
NSLayoutConstraint.activate([ NSLayoutConstraint.activate([
buttonBar.topAnchor.constraint(equalTo: self.profileHeaderViewController.profileHeaderView.bottomAnchor), buttonBar.topAnchor.constraint(equalTo: self.profileHeaderViewController.profileHeaderView.bottomAnchor),
buttonBar.leadingAnchor.constraint(equalToSystemSpacingAfter: self.profileHeaderViewController.view.leadingAnchor, multiplier: 2.0), buttonBar.leadingAnchor.constraint(equalTo: self.profileHeaderViewController.view.leadingAnchor),
buttonBar.trailingAnchor.constraint(equalTo: self.profileHeaderViewController.view.layoutMarginsGuide.trailingAnchor), buttonBar.trailingAnchor.constraint(equalTo: self.profileHeaderViewController.view.trailingAnchor),
buttonBar.bottomAnchor.constraint(equalTo: self.profileHeaderViewController.view.bottomAnchor), buttonBar.bottomAnchor.constraint(equalTo: self.profileHeaderViewController.view.bottomAnchor),
buttonBar.heightAnchor.constraint(equalToConstant: ProfileHeaderViewController.segmentedControlHeight).priority(.required - 1), buttonBar.heightAnchor.constraint(equalToConstant: ProfileHeaderViewController.segmentedControlHeight).priority(.required - 1),
]) ])
}) })
) )
updateBarButtonInsets()
overlayScrollView.translatesAutoresizingMaskIntoConstraints = false overlayScrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(overlayScrollView) view.addSubview(overlayScrollView)
@ -389,6 +393,31 @@ extension ProfileViewController {
currentPostTimelineTableViewContentSizeObservation = nil 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 { extension ProfileViewController {

View File

@ -30,8 +30,8 @@ extension AdaptiveContainerMarginTableViewCell {
public func updateContainerViewMarginConstraints() { public func updateContainerViewMarginConstraints() {
func setupContainerForPhone() { func setupContainerForPhone() {
containerView.updateContainerViewComponentsLayoutMarginsRelativeArrangementBehavior(isEnabled: true) // add inner margin for phone containerView.updateContainerViewComponentsLayoutMarginsRelativeArrangementBehavior(isEnabled: true) // add inner margin for phone
containerViewLeadingLayoutConstraint.constant = 0 // remove outer margin for phone containerViewLeadingLayoutConstraint.constant = 0 // remove outer margin for phone
containerViewTrailingLayoutConstraint.constant = 0 containerViewTrailingLayoutConstraint.constant = 0
} }
@ -43,7 +43,7 @@ extension AdaptiveContainerMarginTableViewCell {
setupContainerForPhone() setupContainerForPhone()
return 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 containerViewLeadingLayoutConstraint.constant = Self.containerViewMarginForRegularHorizontalSizeClass // add outer margin for iPad
containerViewTrailingLayoutConstraint.constant = Self.containerViewMarginForRegularHorizontalSizeClass containerViewTrailingLayoutConstraint.constant = Self.containerViewMarginForRegularHorizontalSizeClass
} }