Navigationbar custom

안녕하세요 학교정보를 모아서 보여주는 앱을 개발하는 중입니다!

앱의 네비게이션바를 커스텀하는 중인데요
라지타이틀 상태에서 소제목을 넣고 싶어 barButonItem에다 제가 만든 뷰를 넣는 형식으로 구현했는데
스크롤할경우에도 이 제목이 남아서… 골머리를 앓고 있습니다 혹시 스크롤할때는 네비게이션 바버튼아이템을 없애고 싶은데
어떻게 해야할까요?? 아시는분들은 답변해주시면 감사하겠습니다:blush:

*아래는 코드와 실행했을때 모습입니다.

// Source label 추가
            let source = NSAttributedString(string: channels[selectedChannel].source!, attributes: [.font : UIFont.boldSystemFont(ofSize: 20), .foregroundColor: UIColor.sourceFont])
            let rightView = UIView()
            rightView.frame = CGRect(x: 0, y: 0, width: .bitWidth, height: 70)
            let rItem = UIBarButtonItem(customView: rightView)
            self.navigationItem.leftBarButtonItem = rItem
            let somet = UILabel()
            somet.frame = CGRect(x:1, y:10, width: 400, height: 62)
            somet.attributedText=source
            rightView.addSubview(somet)

좋아요 1

타이틀을 공지사항(기계공학부) 이렇게 하는게 편하지 않을까요?

UITableView는 UIScrollView의 자식 클래스고 UIScrollView의 델리게이트에는 다음과 같이 스크롤에 관련된 메소드가 정의돼있어요.

  • scrollViewWillBeginDragging
  • scrollViewWillEndDragging
  • scrollViewDidEndDragging
  • scrollViewWillBeginDecelerating

스크롤을 위해서 사용자가 드래그를 시작하는 순간 내비게이션 바의 왼쪽 버튼을 없애려면 다음과 같이 작성하면 되겠죠.

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    self.navigationItem.leftBarButtonItem = nil
}
좋아요 2

저 경우랑 조금 다른데 large title에서 아래로 스크롤하여 아래 사진처럼 title이 작아진 상태일때 leftBarButtonItem이 사라지게 한다던가 그런 방법은 없을까요?

좋아요 2

navigationbar의 높이가 변하는 이벤트 옵저버를 사용하면 될겁니다. 아래 링크에서 addObserver 부분을 살펴보세요. Objective-C인것은… 음

좋아요 2
override func scrollViewDidScroll(_ scrollView: UIScrollView) {

    if scrollView.contentOffset.y <= -100 {

        navigationItem.leftBarButtonItem = rItem

    }

    else if scrollView.contentOffset.y > -100 {

        navigationItem.leftBarButtonItem = nil

    }

}

scrollViewDidScroll 메서드를 이용해서 해결했습니다 답변 감사드립니다:blush:

좋아요 1