From 934121690df43f2eba26498f62a9c1c3bf7cd40e Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Thu, 29 Mar 2018 19:22:46 +0300 Subject: [PATCH 1/3] Safe area support added --- Sources/Extensions/UIView/UIView+Layout.swift | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/Sources/Extensions/UIView/UIView+Layout.swift b/Sources/Extensions/UIView/UIView+Layout.swift index f8bdefe8..910b41be 100644 --- a/Sources/Extensions/UIView/UIView+Layout.swift +++ b/Sources/Extensions/UIView/UIView+Layout.swift @@ -47,15 +47,46 @@ public extension UIView { widthAnchor.constraint(equalToConstant: size.width).isActive = true } + func setToCenter(wtih insets: UIEdgeInsets = .zero) { + guard let superview = superview else { + return + } + + translatesAutoresizingMaskIntoConstraints = false + + if #available(iOS 11, *) { + topAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.topAnchor, + constant: insets.top).isActive = true + leadingAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.leadingAnchor, + constant: insets.left).isActive = true + bottomAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.bottomAnchor, + constant: -insets.bottom).isActive = true + trailingAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.trailingAnchor, + constant: -insets.right).isActive = true + } else { + topAnchor.constraint(equalTo: superview.topAnchor, constant: insets.top).isActive = true + leadingAnchor.constraint(equalTo: superview.leadingAnchor, constant: insets.left).isActive = true + bottomAnchor.constraint(equalTo: superview.bottomAnchor, constant: -insets.bottom).isActive = true + trailingAnchor.constraint(equalTo: superview.trailingAnchor, constant: -insets.right).isActive = true + } + } + private func scaleToFill() { guard let superview = superview else { return } - topAnchor.constraint(equalTo: superview.topAnchor).isActive = true - bottomAnchor.constraint(equalTo: superview.bottomAnchor).isActive = true - leftAnchor.constraint(equalTo: superview.leftAnchor).isActive = true - rightAnchor.constraint(equalTo: superview.rightAnchor).isActive = true + if #available(iOS 11, *) { + topAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.topAnchor).isActive = true + bottomAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.bottomAnchor).isActive = true + leftAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.leftAnchor).isActive = true + rightAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.rightAnchor).isActive = true + } else { + topAnchor.constraint(equalTo: superview.topAnchor).isActive = true + bottomAnchor.constraint(equalTo: superview.bottomAnchor).isActive = true + leftAnchor.constraint(equalTo: superview.leftAnchor).isActive = true + rightAnchor.constraint(equalTo: superview.rightAnchor).isActive = true + } } } From e296f5ee77080d5a541626faec344b88cf03ebff Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Thu, 29 Mar 2018 19:52:30 +0300 Subject: [PATCH 2/3] Comment added --- Sources/Extensions/UIView/UIView+Layout.swift | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Sources/Extensions/UIView/UIView+Layout.swift b/Sources/Extensions/UIView/UIView+Layout.swift index 910b41be..bda42bf2 100644 --- a/Sources/Extensions/UIView/UIView+Layout.swift +++ b/Sources/Extensions/UIView/UIView+Layout.swift @@ -47,7 +47,12 @@ public extension UIView { widthAnchor.constraint(equalToConstant: size.width).isActive = true } - func setToCenter(wtih insets: UIEdgeInsets = .zero) { + /** + Place and fix view to parent view's center with insets + + - parameter insets: desired view insets, by default is zero + */ + func setToCenter(wtihInsets insets: UIEdgeInsets = .zero) { guard let superview = superview else { return } From 9a4d934cc2727818d873bc1ad1fb5ae4369f176e Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Thu, 29 Mar 2018 20:00:13 +0300 Subject: [PATCH 3/3] Refactored --- Sources/Extensions/UIView/UIView+Layout.swift | 62 ++++++++++++------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/Sources/Extensions/UIView/UIView+Layout.swift b/Sources/Extensions/UIView/UIView+Layout.swift index bda42bf2..7a75bc2c 100644 --- a/Sources/Extensions/UIView/UIView+Layout.swift +++ b/Sources/Extensions/UIView/UIView+Layout.swift @@ -41,10 +41,14 @@ public extension UIView { return } - centerXAnchor.constraint(equalTo: parent.centerXAnchor).isActive = true - centerYAnchor.constraint(equalTo: parent.centerYAnchor).isActive = true - heightAnchor.constraint(equalToConstant: size.height).isActive = true - widthAnchor.constraint(equalToConstant: size.width).isActive = true + let constraints = [ + centerXAnchor.constraint(equalTo: parent.centerXAnchor), + centerYAnchor.constraint(equalTo: parent.centerYAnchor), + heightAnchor.constraint(equalToConstant: size.height), + widthAnchor.constraint(equalToConstant: size.width) + ] + + NSLayoutConstraint.activate(constraints) } /** @@ -59,21 +63,24 @@ public extension UIView { translatesAutoresizingMaskIntoConstraints = false + let constraints: [NSLayoutConstraint] if #available(iOS 11, *) { - topAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.topAnchor, - constant: insets.top).isActive = true - leadingAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.leadingAnchor, - constant: insets.left).isActive = true - bottomAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.bottomAnchor, - constant: -insets.bottom).isActive = true - trailingAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.trailingAnchor, - constant: -insets.right).isActive = true + constraints = [ + topAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.topAnchor, constant: insets.top), + leadingAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.leadingAnchor, constant: insets.left), + bottomAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.bottomAnchor, constant: -insets.bottom), + trailingAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.trailingAnchor, constant: -insets.right) + ] } else { - topAnchor.constraint(equalTo: superview.topAnchor, constant: insets.top).isActive = true - leadingAnchor.constraint(equalTo: superview.leadingAnchor, constant: insets.left).isActive = true - bottomAnchor.constraint(equalTo: superview.bottomAnchor, constant: -insets.bottom).isActive = true - trailingAnchor.constraint(equalTo: superview.trailingAnchor, constant: -insets.right).isActive = true + constraints = [ + topAnchor.constraint(equalTo: superview.topAnchor, constant: insets.top), + leadingAnchor.constraint(equalTo: superview.leadingAnchor, constant: insets.left), + bottomAnchor.constraint(equalTo: superview.bottomAnchor, constant: -insets.bottom), + trailingAnchor.constraint(equalTo: superview.trailingAnchor, constant: -insets.right) + ] } + + NSLayoutConstraint.activate(constraints) } private func scaleToFill() { @@ -81,17 +88,24 @@ public extension UIView { return } + let constraints: [NSLayoutConstraint] if #available(iOS 11, *) { - topAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.topAnchor).isActive = true - bottomAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.bottomAnchor).isActive = true - leftAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.leftAnchor).isActive = true - rightAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.rightAnchor).isActive = true + constraints = [ + topAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.topAnchor), + bottomAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.bottomAnchor), + leftAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.leftAnchor), + rightAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.rightAnchor) + ] } else { - topAnchor.constraint(equalTo: superview.topAnchor).isActive = true - bottomAnchor.constraint(equalTo: superview.bottomAnchor).isActive = true - leftAnchor.constraint(equalTo: superview.leftAnchor).isActive = true - rightAnchor.constraint(equalTo: superview.rightAnchor).isActive = true + constraints = [ + topAnchor.constraint(equalTo: superview.topAnchor), + bottomAnchor.constraint(equalTo: superview.bottomAnchor), + leftAnchor.constraint(equalTo: superview.leftAnchor), + rightAnchor.constraint(equalTo: superview.rightAnchor) + ] } + + NSLayoutConstraint.activate(constraints) } }