The bounds and frame properties
A UIView is initialized with a frame rectangle. The frame property, represented the frame rectangle, defines the view's size and position in its superview's coordinate system. The bounds property defines the view's size and position in its own coordinate system.
The bounds property is set to the frame property's value during the initialization. If the bounds changes, the frame changes too.
When to use them?
The frame property is used when resizing or moving the view in its superview. The bounds property is used to draw (set the position and size of) the view's content.
The layoutSubviews() method
The example below shows how to create a button with surrounding borders.
import Foundation
import UIKit
class BorderButton : CustomButton {
@IBInspectable var inset:Bool = true {
didSet {
setNeedsLayout()
}
}
@IBInspectable var bottomBorder: CGFloat = 1 {
didSet {
setNeedsLayout()
}
}
@IBInspectable var rightBorder: CGFloat = 1 {
didSet {
setNeedsLayout()
}
}
@IBInspectable var leftBorder: CGFloat = 1 {
didSet {
setNeedsLayout()
}
}
@IBInspectable var topBorder: CGFloat = 1 {
didSet {
setNeedsLayout()
}
}
@IBInspectable var borderColor: UIColor = UIColor.lightGray {
didSet {
setNeedsLayout()
}
}
public override func layoutSubviews() {
super.layoutSubviews()
ViewUtil.setBorders(view: self, top: topBorder, bottom: bottomBorder, left: leftBorder, right: rightBorder, color: borderColor, inset: inset)
}
}
Here is the complete codes of how to add a border to a view.
Layer (CALayer)
Like UIView, CALayer also have frame, bounds, and backgroundColor properties. The values of those properties of a UIView object and its root CALayer object always match. Any changes on the view's property have effect on the matching property of the root layer.
Sub Layer
The root layer of a view can have one or more sub layers. To add a sub layer, call UIView.layer.addSublayer() method. After adding a sub layer, any new objects you programmatically add to the view (by calling view.addSubview() method) are drawn on the sub layer. By default, the sublayer's backgroundColor property is nil and size is zero but its content still appear in the view. This is the purpose of the layer. If the sublayer and the root layer have the same frame's sizes and the sublayer's backgroundColor is set to yellow, for example, the root layer and its content completely disappear.Layout Margins
A view has margins to define spaces between its content and its top, left, bottom, and right edges. For more details, go to this post.
Auto Layout and Constraints
A view can layout its contents dynamically (automatically) based on a predefined constraint. Go to this post for more details.
No comments:
Post a Comment