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
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

View File

@ -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 {

View File

@ -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
}