안녕하세요!
오늘은 UINavigationController의 Navigation Bar에 Search Bar를 예쁘게 넣는 방법에 대해서 알아보겠습니다!
왜 굳이 예쁘게 라고 하냐구요? 다 이유가 있습니다.
제가 만들고 싶은 상단의 네비게이션 바 디자인은 아래과 같은 스타일이었어요.
백버튼과 같은 레벨의 높이에 위치하는 것 인데요.
그런데 일반적으로 많이 쓰이는 방법인 Navigation Controller에 UISearchController를 넣어주는 방식으로 만들어보니 모양이 조금 다르더라구요.
//ViewController 내에서
let searchCon = UISearchController()
self.navigationItem.searchController = searchCon
어떻게 할까 하다가 NavigationBar의 아이템으로 넣어줘 보았어요.
let searchBar = UISearchBar(frame: CGRect(x: 0, y: 0, width: width 200, height: 0))
searchBar.placeholder = "띄어쓰기로 복수 입력이 가능해요"
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: searchBar)
모양은 마음에 들어요! 백 버튼과 정확하게 얼라인이 되네요! 그런데...
인스턴스를 만들어 줄 때, 가로길이를 200으로 줬는데요. 이런식으로 가로 길이를 정해버렸더니 웬걸!!!
이게 우측 바 아이템으로 넣는거다 보니까 옆으로 치우쳐져 있더라구요. 아,, 안돼!!! 그리고 고정 넓이를 해 버리면 여러 디바이스 넓이에 대해 반응을 하지 못할테니 걱정도 되었어요.
그래서 화면의 넓이를 구하고 거기에서 버튼 크기만큼 빼주기로 했어요.
var bounds = UIScreen.main.bounds
var width = bounds.size.width //화면 너비
let searchBar = UISearchBar(frame: CGRect(x: 0, y: 0, width: width - 28, height: 0))
searchBar.placeholder = "띄어쓰기로 복수 입력이 가능해요"
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: searchBar)
이렇게 해서 원하는 만큼 디자인이 나와 주었어요! 기분이 좋은데요??
UISearchBar와 UISearchController를 사용하다보면 Delegate 와 DataSource를 쓰게 되는데
당연한 얘기겠지만 UISearchBar와 UISearchController의 Delegate 내의 내장된 함수들이 약간씩 다르다.
그래도 다 비슷비슷 하긴 하지만...
혹시 모르니 UISearchBarDelegate 공식문서 주소를 남겨두겠다!
도움이 되셨길 바랍니다! 혹시 궁금한 점이나 내용에 수정해야 할 부분이 있다면 언제든 댓글 주세요.
더 좋은 방법을 알려주셔도 너무 감사하겠습니다!
[iOS/Swift] 스택(Stack)과 스택 오버플로우란? 예제로 알아보기 (0) | 2022.02.16 |
---|---|
[Swift] 스위프트의 값 타입과 참조 타입 (코드로 실험하기) (0) | 2022.02.15 |
[iOS/Swift] Singleton 패턴 사용의 이유와 사용 방법 (0) | 2022.02.08 |
[iOS/Swift] UINavigationController 와 UITabBarController 동시에 쓰는 방법 - Swift (7) | 2022.02.05 |
[iOS/Swift] MKMapKit, CLCoreLocation 으로 지도앱 만들기- 소스코드 제공 (10) | 2022.02.03 |