NavigationView 의 navigationBarTitle 에 관하여 질문이 있습니다.

6 답변 글타래를 보이고 있습니다
  • 글쓴이
    • jckang568
      참가자
      • 글작성 : 1
      • 답글작성 : 6

      안녕하세요 동영상으로 질문 있습니다.
      네비게이션뷰를 연습하고 있는데요.
      스크롤 시 largeTitle이 사라지고 inline에 타이틀이 생기는 애니메이션이 있는데
      display : inline 을 하게 되면 이 뷰에 들어오자마자 inline에 ‘Lorem Ipsum’ 이 나옵니다.(즉 애니메이션이 사라집니다.)
      최종적인 질문은 이 뷰에서 largeTitle만 없애고 inlineTitle이 사라졌다 나타졌다 하는 애니메이션은 작동하게 하고 싶은데 어디서 컨트롤 해야할까요?

      비슷한 코드는 영상 아래에 첨부 하겠습니다.

       

      NavigationView

       

       

      <article id=”702bf36e-ce97-4a25-8acc-933460cfd829″ class=”page sans”>
      <div class=”page-body”>

      import SwiftUI
      
      struct ContentView: View {
          let test = ArticleContent()
          var body: some View {
              TabView {
                  NavigationView {
                      ScrollView{
                          Text(test.content)
                      }
                      .navigationBarTitle("Page One")
                  }
                  .tabItem {
                      (Image(systemName: "1.circle"))
                      Text("1 Page")
                  }
                  NavigationView {
                      ScrollView{
                          Text(test.content)
                      }
                      .navigationBarTitle("Page Two")
                  }
                  .tabItem {
                      (Image(systemName: "2.circle"))
                      Text("2 Page")
                  }
                  NavigationView {
                      ScrollView{
                          Text(test.content)
                      }
                      .navigationBarTitle("Page Three")
                  }
                  .tabItem {
                      (Image(systemName: "3.circle"))
                      Text("3 Page")
                  }
              }
          }
      }
      
      struct ContentView_Previews: PreviewProvider {
          static var previews: some View {
              SwiftUIView()
          }
      }

      <p id=”e6728dfc-689d-48f9-aa2c-4a5eebf9ed87″ class=””> </p>

      </div>
      </article>

      • 이 게시글은 jckang568에 의해 4 years, 5 months 전에 수정됐습니다.
      • 이 게시글은 jckang568에 의해 4 years, 5 months 전에 수정됐습니다.
      • 이 게시글은 jckang568에 의해 4 years, 5 months 전에 수정됐습니다. 이유: Gif 동작을 안함
      • 이 게시글은 jckang568에 의해 4 years, 5 months 전에 수정됐습니다. 이유: GIF 동작을 안하여 삭제
      • 이 게시글은 jckang568에 의해 4 years, 5 months 전에 수정됐습니다.
    • jckang568
      참가자
      • 글작성 : 1
      • 답글작성 : 6

      GIF 영상은 동작하지 않아서 동영상 링크로 대체합니다.

      동영상 보기

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579
                  NavigationView {
                      ScrollView{
                          Text(test.content)
                      }
                      .navigationBarTitle("Page One", displayMode: .automatic)
                  }
      

      이렇게 해도 마찬가진가요? ‘ㅁ’

      혹은

       .navigationBarTitle(Text("Page One"), displayMode: .automatic)
      

      는 어떤가요?

      • 이 답변은 야곰에 의해 4 years, 5 months 전에 수정됐습니다.
    • jckang568
      참가자
      • 글작성 : 1
      • 답글작성 : 6

      답변 감사드립니다.

      navigationBarTitle에 1가지 파라미터(Text: String)만 넘기면 displayMode는 default값이 automatic이라 제가 원하는 답변은 아니었습니다.

      제 질문이 약간 어려웠을 수도 있는데 앱스토어에서 쉽게 받을 수 있는 앱으로 설명을 한번 드려보겠습니다.

      벅스라는 음악 스트리밍 어플인데 처음 홈화면은 일반적인 네비게이션처럼 automatic이 되어있습니다.

      logout

      비로그인 영상 참조

       

      그러나 로그인시에는 largeTitle 부분이 사용자 값을 읽어들인 상태에서 뷰를 뿌려주는데 inline시에는 여전히 홈으로 되어있습니다.

      (inline title 부분에 ‘jckang568님 요즘 Pick>’ 이 나오는게 아니라 여전히 ‘홈’이 나옵니다.)

      이걸 간단하게나마 구현하려고 하는데 어려움이 있습니다.

      로그인 영상 참조

       

      iOS 카카오톡 오픈톡방에 질문을 하였으나 1500명 가까이 되는인원이 관심도 가져주질 않아 돌고 돌아 여기까지 오게되었습니다.

      스택오버플로우도 몇시간 뒤졌지만 만족할 만한 답이 있질 않아 다시 한번 질문을 올립니다.

      제 질문이 어려운건지 제 설명에 문제가 있는건지 답답합니다.

    • TTOzzi
      참가자
      • 글작성 : 10
      • 답글작성 : 13

      이 뷰에서 largeTitle만 없애고 inlineTitle이 사라졌다 나타졌다 하는 애니메이션은 작동하게 하고 싶은데

      가 마지막에 올려주신 벅스 앱 영상처럼 largeTitle 과 inlineTitle 이 다른 텍스트를 표시하게 하고 싶다는 말씀이신가요?

      • 이 답변은 TTOzzi에 의해 4 years, 5 months 전에 수정됐습니다.
      • 이 답변은 TTOzzi에 의해 4 years, 5 months 전에 수정됐습니다.
      • jckang568
        참가자
        • 글작성 : 1
        • 답글작성 : 6

        네 맞습니다!

        • TTOzzi
          참가자
          • 글작성 : 10
          • 답글작성 : 13

          혹시 해결하셨나요?!
          Swift UI 는 아직 사용하는 사람이 별로 없어서 그런지 정보가 없네요 ㅜㅜ
          저도 공부하는 처지라 정확하진 않지만 GeometryReader 를 활용해서 ScrollView 의 frame 값과 ScrollView 내부 컨텐츠들의 frame 값을 비교하면 드래그되어 largeTitle 이 inlineTitle 로 변경되는 시점을 찾을 수 있었어요. 두 frame 값을 비교해서 title 을 바꿔주도록 하긴 했는데 동작이 어색하네요 ㅎㅎ;
          작동 영상
          DragGesture 를 활용해도 스크롤하는 시점을 잡을 수 있긴 한데.. 어렵네요.
          도움이 되었으면 좋겠어요!

          struct ContentView: View {
          
              var body: some View {
                  NavigationView {
                      GeometryReader { scrollViewGeometry in
                          ScrollView{
                              GeometryReader { contentGeometry in
                                  VStack {
                                      Text("scroll: \(scrollViewGeometry.frame(in: .global).minY)\ncontent: \(contentGeometry.frame(in: .global).minY)hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohell")
                                          .font(.system(size: 50))
                                  }
                                  .navigationBarTitle(contentGeometry.frame(in: .global).minY < scrollViewGeometry.frame(in: .global).minY - 1 ? "inline title" : "large title", displayMode: .large)
                              }
                              .frame(width: scrollViewGeometry.size.width, height: 1000)
                          }
                      }
                  }
              }
          }
          
          • jckang568
            참가자
            • 글작성 : 1
            • 답글작성 : 6

            늦은 시간에도 답변 감사드립니다 =)

            코드 참고하여 수정 해보겠습니다!

            • 야곰
              키 마스터
              • 글작성 : 37
              • 답글작성 : 579

              이거 잘 해결됐나 궁금하네요~

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579

      저도 또치님 처럼 이해했는데 맞는지 모르겠네요.
      다른 분들도 관심이 없어서 대답을 안했다기 보다는 질문의 요지를 파악하기 어려웠거나, 아직 SwiftUI가 널리 쓰이지 않아서 모르는 부분이라 답변하지 못했을 것 같아요.

      • jckang568
        참가자
        • 글작성 : 1
        • 답글작성 : 6

        네… 답변 감사드립니다.

    • 멍단비
      참가자
      • 글작성 : 10
      • 답글작성 : 98

      질문하셨다가 답변 못받는걸로는 너무 상심하지마세요~
      위에 야곰님 말씀대로 아직 SwiftUI가 널리 안쓰여서 그런것도 있고, 설사 아는거라도 애매하게 기억나는건 답변안하죠 보통. 잘못된 정보를 전달하면 안되니까요.
      그리고 어차피 개발자 여러명 있는 곳에 가도 자기분량 개발은 혼자하는거라서 차라리 지금 구현 죽어도 안 될것 같다 싶으시면 그냥 놔버리세요.
      그리고 한 1~2주일있다가 다시 보면 금방 해결되는 경우도 많아요. 그런 경험이 쌓이면 더 좋다고 봐요. 스스로 해결하는 능력이 생기는 거니까요.
      결정적으로 저도 그 방에 들어가있지만 질문에 답변 못받은 경우 많아요. 다들 업무중이시고 바쁜분들이니 돈내고 리뷰서비스를 받는게 아닌이상 답변해주셔야할 의무는 없는거니까요.
      힘내시고 저도 스유는 흉내만 내봐서 답변은 못드리고 응원만 하고 갈게요~ 파이팅

      • jckang568
        참가자
        • 글작성 : 1
        • 답글작성 : 6

        네. 조언 감사드립니다

6 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom