mastodon-app-ufficiale-ipho.../MastodonSDK/Sources/MastodonUI/Protocol/AdaptiveMarginStatusTableVi...

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