diff --git a/Sources/SwiftyUIKit/DisclosureView.swift b/Sources/SwiftyUIKit/DisclosureView.swift deleted file mode 100644 index aec93b1..0000000 --- a/Sources/SwiftyUIKit/DisclosureView.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// File.swift -// -// -// Created by Sergey Kazakov on 30.11.2020. -// - -import UIKit - -public extension DisclosureView { - enum ExpandingAxis { - case horizontal - case vertical - case all - } -} - -public final class DisclosureView: UIView { - private let isExpanded: () -> Bool - private var conditionalContraints: [NSLayoutConstraint] - - public init(_ isExpanded: @escaping () -> Bool, - axis: ExpandingAxis = .all, - content: () -> UIView) { - - self.isExpanded = isExpanded - let contentView = content() - let contraints: [NSLayoutConstraint] - - switch axis { - case .horizontal: - contraints = [ - contentView.widthAnchor.constraint( - lessThanOrEqualToConstant: NSLayoutConstraint.defaultLargeConstant) - ] - case .vertical: - contraints = [ - contentView.heightAnchor.constraint( - lessThanOrEqualToConstant: NSLayoutConstraint.defaultLargeConstant) - ] - case .all: - contraints = [ - contentView.heightAnchor.constraint( - lessThanOrEqualToConstant: NSLayoutConstraint.defaultLargeConstant), - contentView.widthAnchor.constraint( - lessThanOrEqualToConstant: NSLayoutConstraint.defaultLargeConstant) - ] - } - - self.conditionalContraints = contraints - super.init(frame: .zero) - add(body: contentView) - - contraints.forEach { - $0.constant = isExpanded() ? NSLayoutConstraint.defaultLargeConstant : 0 - $0.priority = .defaultHigh - $0.isActive = true - } - } - - public override func updateConstraints() { - super.updateConstraints() - print("updateConstraints") - conditionalContraints.forEach { $0.constant = isExpanded() ? NSLayoutConstraint.defaultLargeConstant : 0 } - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } -} - -fileprivate extension NSLayoutConstraint { - static let defaultLargeConstant: CGFloat = 9999 -} diff --git a/Sources/SwiftyUIKit/HStackView.swift b/Sources/SwiftyUIKit/HStackView.swift index ecfef0f..6482e5b 100644 --- a/Sources/SwiftyUIKit/HStackView.swift +++ b/Sources/SwiftyUIKit/HStackView.swift @@ -7,10 +7,15 @@ import UIKit -extension HStackView { - public convenience init(spacing: CGFloat = 0, @ViewContentBuilder content: () -> [UIView]) { +public extension HStackView { + convenience init(spacing: CGFloat = 0, @ViewContentBuilder content: () -> [UIView]) { self.init(spacing: spacing, content: content()) } + + convenience init(spacing: CGFloat = 0, @OptionalViewContentBuilder optionalContent: () -> [UIView]) { + self.init(spacing: spacing, content: optionalContent()) + } + } public final class HStackView: UIView { diff --git a/Sources/SwiftyUIKit/UIView+Padding.swift b/Sources/SwiftyUIKit/UIView+Padding.swift index 8b0c6f4..4dc5f16 100644 --- a/Sources/SwiftyUIKit/UIView+Padding.swift +++ b/Sources/SwiftyUIKit/UIView+Padding.swift @@ -27,20 +27,12 @@ public extension UIView { bottomConstant: bottom) } - func padding(vertical: CGFloat = 0) -> UIView { + func padding(vertical: CGFloat = 0, horizontal: CGFloat = 0) -> UIView { PaddingViewDecorator(decorated: self, topConstant: vertical, - leftConstant: 0, - rightConstant: 0, - bottomConstant: vertical) - } - - func padding(horizontal: CGFloat = 0) -> UIView { - PaddingViewDecorator(decorated: self, - topConstant: 0, leftConstant: horizontal, rightConstant: horizontal, - bottomConstant: 0) + bottomConstant: vertical) } } diff --git a/Sources/SwiftyUIKit/VStackView.swift b/Sources/SwiftyUIKit/VStackView.swift index f0d50c1..ebbd1f9 100644 --- a/Sources/SwiftyUIKit/VStackView.swift +++ b/Sources/SwiftyUIKit/VStackView.swift @@ -7,10 +7,14 @@ import UIKit -extension VStackView { - public convenience init(spacing: CGFloat = 0, @ViewContentBuilder content: () -> [UIView]) { +public extension VStackView { + convenience init(spacing: CGFloat = 0, @ViewContentBuilder content: () -> [UIView]) { self.init(spacing: spacing, content: content()) } + + convenience init(spacing: CGFloat = 0, @OptionalViewContentBuilder optionalContent: () -> [UIView]) { + self.init(spacing: spacing, content: optionalContent()) + } } public final class VStackView: UIView { diff --git a/Sources/SwiftyUIKit/ViewContentBuilder.swift b/Sources/SwiftyUIKit/ViewContentBuilder.swift index 0cc0ba0..6a2bba3 100644 --- a/Sources/SwiftyUIKit/ViewContentBuilder.swift +++ b/Sources/SwiftyUIKit/ViewContentBuilder.swift @@ -13,3 +13,10 @@ public struct ViewContentBuilder { subviews } } + +@resultBuilder +public struct OptionalViewContentBuilder { + public static func buildBlock(_ subviews: UIView?...) -> [UIView] { + subviews.compactMap { $0 } + } +} diff --git a/Sources/SwiftyUIKit/ZStackView.swift b/Sources/SwiftyUIKit/ZStackView.swift index 00efca1..766cf1d 100644 --- a/Sources/SwiftyUIKit/ZStackView.swift +++ b/Sources/SwiftyUIKit/ZStackView.swift @@ -7,10 +7,14 @@ import UIKit -extension ZStackView { - public convenience init(alignment: Alignment = .all, @ViewContentBuilder content: () -> [UIView]) { +public extension ZStackView { + convenience init(alignment: Alignment = .all, @ViewContentBuilder content: () -> [UIView]) { self.init(alignment: alignment, content: content()) } + + convenience init(alignment: Alignment = .all, @OptionalViewContentBuilder optionalContent: () -> [UIView]) { + self.init(alignment: alignment, content: optionalContent()) + } } public final class ZStackView: UIView {