프로그래밍
-
[iOS] scrollViewDidEndScrollingAnimation이 시뮬레이터에서는 호출되지만 디바이스에서 호출되지 않을 때프로그래밍/iOS 2021. 3. 24. 23:23
문제 상황 테이블뷰에서 마지막 셀로 스크롤시켰을때, 스크롤 애니메이션이 끝날때 호출되는 메서드인 scrollViewDidEndScrollingAnimation에 마지막 셀에 접근하고 키보드 팝업을 올리려고 했다. tableView.scrollToRow를 사용했을 때 시뮬레이터에서는 scrollViewDidEndScrollingAnimation가 호출이 되었지만, 디바이스에서는 호출이 안되었다. 원인 scrollViewDidEndScrollingAnimation은 setContentOffset:animated:또는 scrollRectToVisible:animated:을 사용할 때만 호출된다고 한다. scrollToRow를 사용했을 때 시뮬레이터에서는 호출되었던건 왜 그런지 모르겠음. 해결방법 tableVi..
-
[iOS] hidesSearchBarWhenScrolling가 작동하지 않을 때프로그래밍/iOS 2021. 3. 13. 23:17
문제 상황: navigationItem.hidesSearchBarWhenScrolling = true 위 코드를 사용해서 UISearchBar가 스크롤 할 때 사라지는 것을 기대했지만 사라지지 않음 해결 방법: 빨간색 박스가 그려져 있는 왼쪽사진이 처음 문제가 발생했을 때 구조고, 오른쪽은 해결했을 때의 구조임. 문제가 발생했을 때 content view아래에 toolbar와 scroll view가 같이 있는데, toolbar가 scroll view 순서가 뒤에 와 있음. 오른쪽 사진처럼 드래그 이벤트가 발생하는 scroll view를 순서를 맨 뒤로 보내면 해결됨.
-
[iOS] tableView.indexPath(for: UITableViewCell)이 nil이 반환될 때프로그래밍/iOS 2021. 3. 9. 01:05
indexPath(for:) Declaration func indexPath(for cell: UITableViewCell) -> IndexPath? 우선 셀은 지속적으로 재사용되고 테이블뷰에 의해 관리되고 있으므로 외부에서 cell을 직접참조를 해서 어떤 작업을 하는 것은 피해야한다. 원인: nil이 발생하는 원인은 아직 추가되지 않은 셀, 셀이 표시가 되지 않고 있음, indexPath가 범위를 벗어남 이 있다고 한다. 그러나 내 경우는 화면상에 셀이 보이고 있는 상태인데 계속 nil이 반환되었다. 정확히는 모르지만 셀 내부 컨텐츠뷰들을 수정하고나면 어떠한 이유로 인해서 nil이 반환하는 일이 생기는 것 같다. 조건: textView의 텍스트를 수정하지 않으면 nil이 발생하는 일이 없었다. 전후 상..
-
[iOS] Dynamic Font프로그래밍/iOS 2021. 2. 10. 15:00
1. 사진 위에 폰트가 정해진 비율에 맞춰서 배치가 되어야 할 때 1. 이미지뷰의 Aspect Ratio 속성에 체크 후 이미지 비율대로 입력 2. 이미지뷰와 레이블을 뷰로 감싸기 3. 레이블을 사진의 top, bottom에 정렬 4. 레이블의 bottom 쪽 constraint의 multiplier를 수정하여 적절한 위치에 배치 비율을 먹일 때 사진과 레이블을 동시 클릭후 설정해도 슈퍼뷰에 대한 크기로 비율이 먹게 됨. 그래서 뷰로 한번 더 감싸고 그 뷰의 크기를 조절한 후에 비율을 먹이는 방식으로 조절함 2. AutoShrink 설정할 때 1. 먼저 가장 큰 디바이스로 놓고 폰트 크기를 설정한다. 최소 폰트 사이즈 설정 / 현재 폰트에서 어느정도까지 축소 가능 과 같이, 현재 폰트에서 작아지는 방향에..
-
[iOS] applicationWillResignActive(_:)가 호출되지 않을 때(푸시 알림)프로그래밍/iOS 2020. 10. 11. 23:58
문제 상황: UserNotification 프레임워크를 이용해서 로컬 푸시알림을 구현 중, 백그라운드에 들어갈 때 호출되는 메소드 applicationWillResignActive(_:)이 호출되지 않아, 푸시알림이 오지 않는 것 처럼 보이는 일이 발생함. 발생 원인: iOS 13 이후 변경된 생명주기 이벤트 전달 방식 때문임. 백그라운드에 들어갔을 때 호출되는 메소드는 AppDelegate.swift의 applicationWillResignActive(_:)가 아닌, SceneDelegate.swift의 sceneWillResignActive(_:)임. 해결 방법: SceneDelegate의 sceneWillResignActive(_:)에서 처리해주면 됨 참고: developer.apple.com/do..