You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.8 KiB
61 lines
1.8 KiB
/*********************************************
|
|
*
|
|
* This code is under the MIT License (MIT)
|
|
*
|
|
* Copyright (c) 2016 AliSoftware
|
|
*
|
|
*********************************************/
|
|
|
|
import UIKit
|
|
|
|
// MARK: Protocol Definition
|
|
|
|
/// Make your UIView subclasses conform to this protocol when:
|
|
/// * they *are* NIB-based, and
|
|
/// * this class is used as the XIB's File's Owner
|
|
///
|
|
/// to be able to instantiate them from the NIB in a type-safe manner
|
|
public protocol NibOwnerLoadable: class {
|
|
/// The nib file to use to load a new instance of the View designed in a XIB
|
|
static var nib: UINib { get }
|
|
}
|
|
|
|
// MARK: Default implementation
|
|
|
|
public extension NibOwnerLoadable {
|
|
/// By default, use the nib which have the same name as the name of the class,
|
|
/// and located in the bundle of that class
|
|
static var nib: UINib {
|
|
return UINib(nibName: String(describing: self), bundle: Bundle(for: self))
|
|
}
|
|
}
|
|
|
|
// MARK: Support for instantiation from NIB
|
|
|
|
public extension NibOwnerLoadable where Self: UIView {
|
|
/**
|
|
Adds content loaded from the nib to the end of the receiver's list of subviews and adds constraints automatically.
|
|
*/
|
|
func loadNibContent() {
|
|
let layoutAttributes: [NSLayoutConstraint.Attribute] = [.top, .leading, .bottom, .trailing]
|
|
for case let view as UIView in Self.nib.instantiate(withOwner: self, options: nil) {
|
|
view.translatesAutoresizingMaskIntoConstraints = false
|
|
self.addSubview(view)
|
|
NSLayoutConstraint.activate(layoutAttributes.map { attribute in
|
|
NSLayoutConstraint(
|
|
item: view, attribute: attribute,
|
|
relatedBy: .equal,
|
|
toItem: self, attribute: attribute,
|
|
multiplier: 1, constant: 0.0
|
|
)
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Swift < 4.2 support
|
|
#if !(swift(>=4.2))
|
|
private extension NSLayoutConstraint {
|
|
typealias Attribute = NSLayoutAttribute
|
|
}
|
|
#endif
|