diff --git a/Sources/Extensions/UIView/UIView+Layout.swift b/Sources/Extensions/UIView/UIView+Layout.swift index f8bdefe8..7a75bc2c 100644 --- a/Sources/Extensions/UIView/UIView+Layout.swift +++ b/Sources/Extensions/UIView/UIView+Layout.swift @@ -41,10 +41,46 @@ 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) + } + + /** + 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 + } + + translatesAutoresizingMaskIntoConstraints = false + + let constraints: [NSLayoutConstraint] + if #available(iOS 11, *) { + 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 { + 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() { @@ -52,10 +88,24 @@ public extension UIView { 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 + let constraints: [NSLayoutConstraint] + if #available(iOS 11, *) { + 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 { + constraints = [ + topAnchor.constraint(equalTo: superview.topAnchor), + bottomAnchor.constraint(equalTo: superview.bottomAnchor), + leftAnchor.constraint(equalTo: superview.leftAnchor), + rightAnchor.constraint(equalTo: superview.rightAnchor) + ] + } + + NSLayoutConstraint.activate(constraints) } }