iOS/UIKIT

네비게이션 바 버튼에 이미지의 사이즈를 조절하는 방법

밤새는 탐험가89 2024. 7. 3. 16:50

수정 전 (왼쪽) / 수정 후 (오른쪽)

구현 내용

  • 넷플릭스의 로고의 사이즈가 너무 커서 화면에 왼쪽으로 오는게 아니라 중앙에 온다. 
  • 이를 해결하기 위해 이미지 사이즈를 임의의로 줄여서 적용했다. 

 

구현 코드

수정 전 

var image = UIImage(named: "logo.png")
image = image?.withRenderingMode(.alwaysOriginal)
navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style: .plain, target: self, action: nil)

 

수정 후 

let originalImage = UIImage(named: "logo.png")
let scaledSize = CGSize(width: 25, height: 25) // 시스템 버튼과 비슷한 크기

// 새로운 그래픽 컨텍스트를 생성한다. 이 컨텍스트는 이미지를 그리는 데 사용된다.
UIGraphicsBeginImageContextWithOptions(scaledSize, false, 0.0)

// 원본 이미지를 새로 정의한 크기의 사각형 영역에 그린다.
originalImage?.draw(in: CGRect(origin: .zero, size: scaledSize))

// 그래픽 컨텍스트에서 새로 그려진 이미지를 가져온다.
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()

// 그래픽 컨텍스트를 종료한다.
UIGraphicsEndImageContext()

// 원본 이미지 색상을 유지하기 위해 렌더링 모드를 .alwaysOriginal로 설정
// 이렇게 하면 이미지가 항상 원래의 색상으로 표시된다.
let originalColorImage = scaledImage?.withRenderingMode(.alwaysOriginal)

let barButton = UIBarButtonItem(image: originalColorImage, style: .plain, target: self, action: #selector(leftBarButtonTapped))
navigationItem.leftBarButtonItem = barButton