Open Naryuko opened 1 year ago
UILayoutPriority The layout priority is used to indicate to the constraint-based layout system which constraints are more important, allowing the system to make appropriate tradeoffs when satisfying the constraints of the system as a whole.
.required == 1000
.defaultHigh == 750
.defaultLow == 250
등 미리 정의된 값들도 존재view.centerY = superView.centerY
, view.top = superView.top + 100
이라는 동시에 만족될 수 없는 constraint가 적용되어 있지만 view.centerY = superView.centerY
의 priority가 더 높아 가운데 정렬이 되어 있다.
The natural size for the receiving view, considering only properties of the view itself.
Intrinsic Contet Size Width | Intrinsic Contet Size Height | |
---|---|---|
UIView | X | X |
UISlider | O | X |
UILabel, UIButton, UISwitch, UITextField | O | O |
TextView, ImageView | Content에 따라 변화함 |
Returns the priority with which a view resists being made larger than its intrinsic size.
Returns the priority with which a view resists being made smaller than its intrinsic size.
stack view
는 horizontal
, vertical
2가지 방향이 존재하며 arrangedSubviews
property를 통해 내부에 추가된 view들을 관리함addSubview(_:)
가 아니라 addArrangedSubview(_:)
를 통해 view를 추가해야 함다음 5가지 값이 존재
contentHuggingPriority
, contentCompressoinRegistancePriority
에 따라 view들을 늘이거나 줄임contentCompressoinRegistancePriority
에 따라 view가 줄어듬spacing
최솟값이 될 때까지 view들 사이 간격을 줄이고, 그래도 view들 크기가 더 크다면 contentCompressoinRegistancePriority
에 따라 view를 줄임. 기본적으로는 view들의 axis방향 center가 동일한 간격이 되도록 위치 조정, intrinsic size는 바뀌지 않음distribution
이 fillProportionally
인 경우 view들 사이의 고정된 간격으로 작용distribution
이 equalSpacing
또는 equalCentering
인 경우 간격의 최솟값으로 사용됨distribution
과 spacing
을 통해 자동으로 조정됨alignment
property를 통해 설정let storyboard = UIStoryboard(name: storyboardName, bundle: Bundle)
let viewController = storyboard.instantiateViewController(identifier: storyboardID
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setup()
}
func setup() {
guard let nibFile = Bundle.main.loadNibNamed("CustomView", owner: self, options: nil) else { return }
// custom class 이름이 xib 파일 이름과 같을 경우 다음과 같이도 사용 가능
let name = String(describing: type(of: self))
guard let nibFile = Bundle.main.loadNibNamed(name, owner: self, options: nil) else { return }
guard let nibView = nibFile.first as? UIView else { return }
nibView.frame = self.bounds
nibView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addSubview(nibView)
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setup()
}
func setup() {
let nibFile = UINib(nibName: "customView", bundle: Bundle.main)
// custom class 이름이 xib 파일 이름과 같을 경우 다음과 같이도 사용 가능
let name = String(describing: type(of: self))
let nibFile = UINib(nibName: name, bundle: Bundle.main)
guard let nibView = nibFile.instantiate(withOwner: self, options: nil).first as? UIView else { return }
nibView.frame = self.bounds
nibView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addSubview(nibView)
}
guard let nibFile = Bundle.main.loadNibNamed("customView", owner: self, options: nil) else { return }
guard let nibView = nibFile.first as? CustomView else { return }
View controller - init(coder:)
View controller - awakeFromNib()
View controller - willMove(toParentViewController:)
View controller - loadView()
View - init(coder:)
View - layerClass
View - setNeedsDisplay()
View - translatesAutoresizingMaskIntoConstraints
View -addConstraints(_:)
View - willMove(toSuperview:)
View -didMoveToSuperview()
View - awakeFromNib()
View controller - viewDidLoad()
View controller - viewWillAppear()
View - willMove(toWindow:)
View - needsUpdateConstraints()
View - didMoveToWindow()
View - translatesAutoresizingMaskIntoConstraints
View - updateConstraints()
View -intrinsicContentSize
View controller - updateViewConstraints()
View controller - viewWillLayoutSubviews()
View - layoutSubviews()
View - alignmentRectInsets
View controller - viewDidLayoutSubviews()
View - draw(_:)
View controller - viewDidAppear()
View controller - didMove(toParentViewController:)
Platform | Scale factors |
---|---|
iOS | @2x and @3x |
iPadOS | @2x |
macOS, tvOS | @1x and @2x |
watchOS | @2x |
Screen size | Image scale |
---|---|
38mm | 90% |
40mm | 100% |
41mm | 106% |
42mm | 100% |
44mm | 110% |
45mm | 119% |
49mm | 119% |
UIGraphicsGetImageFromCurrentImageContext | sRGB(default) |
---|---|
UIGraphicsImageRenderer | Display P3(default), sRGB |
UIGraphicsImageRenderer
가 UIGraphicsGetImageFromCurrentImageContext
보다 느림// 애플에서 정의한 format enum
extension UIGraphicsImageRendererFormat {
@available(iOS 12.0, *)
public enum Range : Int {
case unspecified
case automatic
case extended // Display P3 항상 사용
case standard // sRGB 항상 사용
}
}
let format = UIGraphicsImageRendererFormat.default()
format.preferredRange = .automatic
// imageRenderer 생성시 색 공간을 설정한 format을 넘겨주어 sRGB color space 사용 가능
let imageRenderer = UIGraphicsImageRenderer(size: size, format: format)
Auto Layout
스토리보드, xib
Human Interface Guideline