Info.plist
에 Appearance
항목을 추가한 뒤 Value에 Light
를 작성해주면 된다.#available
은 버전 별 분기 처리를 해줘야하는 경우 사용하는 키워드이고UiTraitCollection
은 iOS 인터페이스 환경에 대한 정보를 갖고 있는 객체이다!if #available(iOS 13.0, *) {
switch traitCollection.userInterfaceStyle {
case .light, .unspecified:
view.backgroundColor = UIColor(named: "light")
case .dark:
dismissButton.backgroundColor = UIColor(named: "dark")
}
} else {
view.backgroundColor = .white
}
디바이스 기준의 여백 잡기
➡️ 크기, 객체 간의 간격을 설정하지 않으면 충돌이 생길 수 있다.
뷰 객체 간의 간격 조절
➡️ 여기서 빌드하면 문제가 생길 확률이 높다.
➡️ 각 개체의 크기가 정해지지 않았기 때문에
뷰 객체 중 일부분의 크기를 설정
➡️ 만약 두 객체가 있는 경우, 하나의 높이만 설정해주면 된다. 모든 영역에 대해 고정 높이를 설정해주면 문제가 생길 수 있기 때문에
Ex. 카카오톡 프로필 사진 위치는 어떻게 설정해야할까?
- 여백을 30으로 주고 나머지를 이미지가 채우도록 (여백에 대한 가이드)
- 고정돼있는 크기를 먼저 처리해달라. 디바이스가 어떤 크기 일지는 모르겠지만 최소한 프로필 이미지가 들어가는 영역은 80x80이었으면 좋겠다.
➡️ 이러한 경우에는 디바이스의 크기에 따라 여백이 너무 작아지거나 커질 수 있는 문제점이 있다.
➡️ 다양한 디바이스에 대한 대처가 가능하도록 비율을 기준으로 잡기도 한다.
Opt
키 누르면 constraint 확인할 수 있다.Cmd+C
Cmd+V
혹은 Cmd+D
로 복제가 가능하지만 IBOutlet
이 연결돼있는 상태에서는 문제가 생길수도 있기 때문에 주의해야한다.IBAction
은 하나의 메서드로 여러 컴포넌트들에 적용시킬 수 있다.UIView
에서 시작했다고 보면 된다. UIView
를 상속하여 구성됐기 때문에 이에 대해 조절 가능한 요소들을 인스펙터창에서 확인할 수 있다.buttonOutletName
은 외부 매개변수
, btn
은 내부 매개변수
이다.func buttonUISetting(buttonOutletName btn: UIButton, buttonTitle title: String = "사탕"){
btn.setTitle(title, for: .normal)
btn.setTitleColor(.black, for: .normal)
btn.layer.cornerRadius = 10
btn.backgroundColor = .white
}
와일드 카드 식별자
를 사용하여 외부 매개변수를 생략할 수 있다.buttonUISetting(tagButton1, "사탕")
처럼 매개변수를 언급해주지 않아도 된다. 하지만 내부 매개변수는 함수 내부에서 사용해야하기 때문에 생략이 불가능하다.func buttonUISetting(_ btn: UIButton, _ title: String){
btn.setTitle(title, for: .normal)
btn.setTitleColor(.black, for: .normal)
btn.layer.cornerRadius = 10
btn.backgroundColor = .white
}
_ title: String = "사탕"
처럼 매개변수의 타입 뒤에 Default Value를 설정해줄 수 있다. 이런 경우, 메서드를 호출할 때 buttonUISetting(tagButton1)
처럼 매개변수가 생략되면 정해져있는 Default Value가 적용된다.func buttonUISetting(_ btn: UIButton, _ title: String = "사탕"){}
didEndOnExit
이벤트를 사용하여 Return키
가 선택되는 이벤트 발생 시 view.endEditing(true)
로 키보드를 내려줄 수 있다.sender
는 내부 매개변수 호칭이다. 따라서 UIButton의 속성들을 메서드 내에서 활용할 수 있다. (Ex. sender.currentTitle)@IBAction func foodTagButtonClicked(_ sender: UIButton) {
userSearchTextField.text = sender.currentTitle
}
override func viewDidLoad() {
super.viewDidLoad()
foodTagButtonClicked(tagButton1)
}
default
를 사용할 수 있다.default
는 필수 요소이다.func presentAlert(title: String) {
print(title)
}
presentAlert(title: "hello")
이때 매개변수는 title
, 전달 인자는 "hello"
Override
키워드가 필수다.UIViewController
Class에 이미 한 번 func viewDidLoad()
가 정의돼있으나 이를 오버라이딩하여 우리가 필요한 함수들을 추가하여 사용할 수 있다.override func viewDidLoad() {
super.viewDidLoad()
}
func reload(tv: UITableView) {
tv.reloadData()
}
func reload(tv: UITableView, cv: UICollectionView) {
tv.reloadData()
cv.reloadData()
}