전체 글 164

collectionView.reloadData()는 어디에 넣을까?

각 스택뷰를 눌렀을 때 userCollectionView의 셀 배경색을 변경하려면, reloadData()를 호출하는 부분을 제스처 메서드에서 수행하는 게 맞습니다.하지만, 현재 cellForItemAt에서 self.backgroundColor로 배경색을 설정하고 있으므로, 변경된 배경색 정보를 저장할 방법이 필요합니다. 예를 들어, ProfileViewController에 selectedColor라는 변수를 추가하여 선택된 색상을 저장하고, reloadData()를 통해 셀 배경을 업데이트할 수 있습니다.  @objc func lampStackTapped() { self.selectedColor = .systemRed print("램프 탭") DispatchQ..

iOS/UIKIT 2024.10.14

StackView에는 그림자 효과를 넣을 수 없다?

UIStackView는 기본적으로 내부적으로는 레이아웃 전용 뷰이기 때문에, layer 속성을 통한 그림자, 모서리 둥글기 등의 효과가 적용되지 않습니다. UIStackView는 자체적으로 콘텐츠를 그리지 않기 때문에, layer 속성은 그 영향력을 미치지 못합니다.  해결 방법:1. UIStackView를 감싸는 UIView에 그림자 적용: 그림자를 적용하려면, UIStackView를 감싸는 별도의 UIView를 추가하고, 그 UIView에 그림자 속성을 적용하는 방법이 필요합니다. 이렇게 하면 UIView가 레이아웃 및 시각적 효과를 담당하고, UIStackView는 그 안에서 레이아웃만 담당하게 됩니다.var containerView: UIView = { let view = UIView() ..

iOS/UIKIT 2024.10.14

MVC 패턴을 위배하지 않고, 서로 다른 View의 오토레이아웃 설정방법

MapView라는 UIView타입의 클래스 안에 userLocationButton을 생성했습니다. 해당 버튼의 위치를 MapSearchView의 TopAnchor에 맞춰서 오토레이아웃을 지정하려고 합니다.  MVC 패턴을 지키려면 userLocationButton을 MapView 내부에서 정의하고, MapView에 MapSearchView와의 관계를 설정할 수 있도록 인터페이스를 열어두는 방식이 더 적합합니다. 예를 들어, MapView 안에서 userLocationButton의 위치를 설정할 수 있는 메서드를 만들어서 컨트롤러가 호출하게 할 수 있어요. 1. MapView에 메서드 추가: userLocationButton을 MapView 안에서 정의하고, MapSearchView의 위치에 맞게 버튼을 ..

iOS/UIKIT 2024.10.11

서치바를 눌렀을 때 서치바 y축 위치를 조절하는 방법

서치바를 눌렀을 때 mapSearchView의 높이를 올려서 키보드가 서치바를 가리지 않도록 하려면, 서치바가 활성화될 때 mapSearchView의 높이를 변경하는 코드를 추가하면 됩니다. 또한, 키보드가 나타날 때 높이를 조정해주는 것이 필요합니다. 아래 방법으로 수정할 수 있습니다:  1. searchBarTextDidBeginEditing에서 높이 조정서치바가 눌렸을 때 mapSearchView의 높이를 조정합니다. 이 코드는 이미 구현된 부분에 추가합니다. func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) { // SearchBar가 활성화되면 높이를 400으로 변경 UIView.animate(withDuration: 0.3) ..

iOS/UIKIT 2024.10.11

왜 서치바 heightAnchor 의 값을 변경했는데.. 왜 높이 조절 안됨?

UISearchBar의 높이를 44에서 100으로 변경했을 때, 높이가 바뀌지 않고 상단에서 내려오는 현상은 UISearchBar의 고정된 기본 높이 때문입니다. UISearchBar는 기본적으로 iOS에서 제공하는 표준 UI 컴포넌트 중 하나로, Apple에서 정해놓은 특정 레이아웃을 따릅니다. 따라서 직접적으로 높이를 변경하는 것이 예상대로 동작하지 않을 수 있습니다.문제의 원인:UISearchBar는 시스템에서 고정된 높이를 가지고 있어, 높이를 강제로 변경하려고 하면 종종 문제가 발생합니다. 특히 UISearchBar는 내부적으로 특정 레이아웃과 제약 조건을 가지고 있어, 기본적으로 약 44포인트의 높이를 유지합니다. 높이를 더 크게 하려는 시도가 충돌을 일으켜 오히려 레이아웃이 깨질 수 있습니다..

iOS/UIKIT 2024.10.11

UISheetPresentationController.... TabBarController를 가린다...

dayTrip이라는 어플에서 Map 검색 부분 처럼 UI를 구성하려고 했습니다. 찾아보니까 UISheetPresentationController의 detent를 사용하여 구성한 것으로 생각했습니다.   import UIKitimport MapKitclass MapViewController: UIViewController { // MARK: - Variables let locationManager = CLLocationManager() // MARK: - UI Components let mapView: MapView = { let mapView = MapView() mapView.translatesAutoresizingMaskIntoConstra..

iOS/UIKIT 2024.10.10

navigationController?.navigationBar.titleTextAttributes

다음과 같은 코드를 통해 네비게이션 바의 제목 텍스트를 빨간색으로 설정할 수 있습니다:navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.red]  또한, 텍스트의 폰트나 스타일을 설정하려면 여러 속성을 포함할 수 있습니다:navigationController?.navigationBar.titleTextAttributes = [ NSAttributedString.Key.foregroundColor: UIColor.blue, // 텍스트 색상 NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 20), /..

iOS/UIKIT 2024.10.09

날짜와 시간을 특정형식의 문자열로 반환하는 코드

Date 타입에 두 가지 계산 속성(computed properties)을 추가하여 날짜와 시간을 특정 형식의 문자열로 변환하는 기능을 제공 extension Date { var dayAndTimeText: String { let timeText = formatted(date: .omitted, time: .shortened) if Locale.current.calendar.isDateInToday(self) { let timeFormat = NSLocalizedString("Today at %@", comment: "Today at time format string") return String(format: timeFormat, ti..

iOS/Swift 2024.10.09

let title = "\(String(describing: model.title)) + 방문"여기서 왜 String(describing으로 감싼거야?그냥 "\(model.title) + 방문" 하면 안돼?

String(describing:)로 감싸는 이유는 주로 Optional 타입의 값을 안전하게 출력하려고 할 때 사용됩니다.만약 model.title이 Optional 타입이라면, 직접 "\(model.title)"으로 문자열 보간을 시도할 경우 Optional("value")와 같이 출력될 수 있습니다. 반면, String(describing: model.title)를 사용하면 값이 있을 경우 그 값을, 없을 경우 "nil"을 출력하게 됩니다.차이점:"\(model.title)": model.title이 nil일 경우 "Optional(nil)"이라는 문자열이 출력됩니다."String(describing: model.title)": model.title이 nil일 경우 "nil"이 출력됩니다.따라서, ..

iOS/Swift 2024.10.05