57 lines
2.4 KiB
Swift
57 lines
2.4 KiB
Swift
![]() |
//
|
||
|
// AdaptiveMarginStatusTableViewCell.swift
|
||
|
//
|
||
|
//
|
||
|
// Created by MainasuK on 2022-2-18.
|
||
|
//
|
||
|
|
||
|
import UIKit
|
||
|
|
||
|
public protocol AdaptiveContainerView: UIView {
|
||
|
func updateContainerViewComponentsLayoutMarginsRelativeArrangementBehavior(isEnabled: Bool)
|
||
|
}
|
||
|
|
||
|
public protocol AdaptiveContainerMarginTableViewCell: UITableViewCell {
|
||
|
associatedtype ContainerView: AdaptiveContainerView
|
||
|
static var containerViewMarginForRegularHorizontalSizeClass: CGFloat { get }
|
||
|
var containerView: ContainerView { get }
|
||
|
var containerViewLeadingLayoutConstraint: NSLayoutConstraint! { get set }
|
||
|
var containerViewTrailingLayoutConstraint: NSLayoutConstraint! { get set }
|
||
|
}
|
||
|
|
||
|
extension AdaptiveContainerMarginTableViewCell {
|
||
|
|
||
|
public static var containerViewMarginForRegularHorizontalSizeClass: CGFloat { 64 }
|
||
|
|
||
|
public func setupContainerViewMarginConstraints() {
|
||
|
containerViewLeadingLayoutConstraint = containerView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor)
|
||
|
containerViewTrailingLayoutConstraint = contentView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor)
|
||
|
}
|
||
|
|
||
|
public func updateContainerViewMarginConstraints() {
|
||
|
func setupContainerForPhone() {
|
||
|
containerView.updateContainerViewComponentsLayoutMarginsRelativeArrangementBehavior(isEnabled: true) // add inner margin for phone
|
||
|
containerViewLeadingLayoutConstraint.constant = 0 // remove outer margin for phone
|
||
|
containerViewTrailingLayoutConstraint.constant = 0
|
||
|
}
|
||
|
|
||
|
switch traitCollection.userInterfaceIdiom {
|
||
|
case .phone:
|
||
|
setupContainerForPhone()
|
||
|
default:
|
||
|
guard traitCollection.horizontalSizeClass == .regular else {
|
||
|
setupContainerForPhone()
|
||
|
return
|
||
|
}
|
||
|
containerView.updateContainerViewComponentsLayoutMarginsRelativeArrangementBehavior(isEnabled: false) // remove margin for iPad
|
||
|
containerViewLeadingLayoutConstraint.constant = Self.containerViewMarginForRegularHorizontalSizeClass // add outer margin for iPad
|
||
|
containerViewTrailingLayoutConstraint.constant = Self.containerViewMarginForRegularHorizontalSizeClass
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public var containerViewHorizontalMargin: CGFloat {
|
||
|
containerViewLeadingLayoutConstraint.constant + containerViewTrailingLayoutConstraint.constant
|
||
|
}
|
||
|
|
||
|
}
|