코딩

swift 네비게이션바 커스텀하기

kingarthur 2024. 9. 8. 10:16

이레저레 커스텀이 항상필요한 네비게이션바... 그래서 맨날 찾기..힘들어 저장해본다

 

    // 네비게이션 바 커스텀
    private func navigationBarCustome() {
        
        let addButton = UIButton(type: .system)
        addButton.setTitle("Add", for: .normal)
        addButton.titleLabel?.font = UIFont.boldSystemFont(ofSize: 18) // 기본 폰트 사이즈 설정
        addButton.setTitleColor(.white, for: .normal)
        
        // 버튼의 눌림 상태를 위한 스타일 설정
        addButton.setTitleColor(.gray, for: .highlighted) // 눌렀을 때 색상 변경
        addButton.sizeToFit() // 버튼 크기를 자동으로 맞춰줌
        
        // 버튼 액션 연결
        addButton.addTarget(self, action: #selector(addButtonTapped), for: .touchUpInside)
        
        // UIBarButtonItem에 UIButton 설정
        let barButtonItem = UIBarButtonItem(customView: addButton)
        navigationItem.rightBarButtonItem = barButtonItem
        
        // 커스텀 백 버튼 이미지 설정
        let backButtonImage = UIImage(named: "back")?.withRenderingMode(.alwaysTemplate) // SF Symbols 화살표 아이콘
        let backButton = UIBarButtonItem(image: backButtonImage, style: .plain, target: self, action: #selector(cancelButtonTapped))
        backButton.tintColor = .white // 아이콘 색상 설정
        self.navigationItem.leftBarButtonItem = backButton
        
        self.navigationItem.backButtonTitle = "" // 혹은 nil로 설정해도 됨
        
        // 네비게이션 바 배경색 설정 (선택 사항)
        self.navigationController?.navigationBar.barTintColor = .black // 네비게이션 바 배경색
        self.navigationController?.navigationBar.tintColor = .white // 버튼 아이콘 색상
        self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
        
        // 타이틀 텍스트 설정
        let titleLabel = UILabel()
        titleLabel.text = "add RM"
        titleLabel.textColor = .white
        titleLabel.font = UIFont.boldSystemFont(ofSize: 18)
        titleLabel.sizeToFit()
        
        // 네비게이션 바에 커스텀 타이틀 설정
        self.navigationItem.titleView = titleLabel
    }

 

이렇게하면 타이틀 폰트 사이즈 조절 가능하고 

 

좌우측 버튼에도 기능을 넣을 수도 있다 이미지도 넣어보고 텍스트 사이즈 조절도 해보았다. 

 

앞으로 자주 사용하자구 

반응형