Storyboard Reference

세 명이서 작업을 했고, 처음에는 스토리보드를 안 쓰고 전부 코드로 작성하기로 했는데, 중간에 스토리보드도 쓰게 되었다. 쓸 사람은 쓰고, 안 쓸 사람은 안 쓰는 상황이 되었다. 서로의 스토리보드를 건드리지 않기 위해서 어떤 식으로 나누었냐면,

  1. 기능별 그룹을 만든다.
  2. 각 기능별 스토리보드를 만든다.
  3. 기능별 스토리보드를 main.storyboard에서 Storyboard Reference를 사용해서 연결한다.

+ 탭 바와 네비게이션 컨트롤러 둘 다 사용했음

main.storyboard에 한 번 모든 기능의 흐름을 연결해놓으니까 보기에도 좋고, 스토리보드 충돌 날 일도 없어서 좋았다. 

코드로 스크롤뷰 만들기

같이 프로젝트를 진행한 택현님이 알려주신 유튜브 동영상이 엄청 도움이 많이 되었다.

class ViewController: UIViewController {
    // MARK:- Properties
    lazy var contentViewSize = CGSize(width: self.view.frame.width, height: self.view.frame.height)    

    // MARK:- Views
    lazy var scrollView: UIScrollView = {
        let view = UIScrollView(frame: .zero)
        view.bacgkroundColor = .white
        view.frame = self.view.bounds
        view.contentSize = contentViewSize
        return view
    }()

    lazy var containerView: UIView = {
        let view = UIView()
        view.backgroundColor = .white
        view.frame.size = contentViewSize
        return view
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white
        view.addSubview(scrollView)
        scrollView.addSubview(containerView)
        // containerView.addSubView(component)
    }
}

스토리보드에서 생성한 Navigation Controller 제약조건 주는 방법

  1. 스토리보드에서 Navigation Controller를 만든다.
  2. 나머지 View는 코드로 작성한다.

이러한 상황에서 어떤 view를 네비게이션 컨트롤러로부터 8만큼 떨어지게 하려면 다음과 같이 작성하면 된다. (SnapKit 사용)

view.snp.makeConstraint {
    $0.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(8)

테이블뷰 셀 사이의 선 지우기

코드로 작성된 테이블뷰 셀 사이의 선을 지우고 싶다면, tableView.separatorStyle = .none을 쓰면 된다. 이때 주의해야 할 점은, 초기 생성 시에 작성하면 안 된다는 것이다.

🚫 Bad

let tableView = UITableView().then {
    $0.separatorStyle = .none
}

👍 Correct

let tableView = UITableView().then {
    // set tableView
}

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.separatorStyle = .none
}