📱 사용자의 폰트 사이즈 정보에 따라 UI 바꿔주기
웨더의 추천으로
어떤 블로그에서 접근성 설정을 하지 않는 것은 인종차별을 하는 것과 마찬가지다 라는 글을 읽었다. (아래 링크를 달아두었다.)
어떤 의미로 이런 제목을 다셨는지는 이해가 되었다.
실제로 아이폰에서 그런 부분들에 대한 지원이 다른 OS 에 비해서 좋아서 많은 장애인 분들이 아이폰을 사용한다는 이야기를 들었다.
Font 사이즈에 대한 접근성을 설정해 주면 사용자의 설정에 따라 Font 사이즈를 줄 수 있다.
그런데 사실 그렇다 보면, 특정 크기 이상 폰트를 키웠을 때 UI 요소가 깨지거나 아주 이상하게 나오는 경우를 볼 수 있다.
사실 Font 에 대한 접근성을 지원한다면 사용자가 폰트 크기를 어떻게 설정하든지 간에 화면에서 보이기에 깔끔해야 한다고 생각했다. 그렇지 않으면 아예 기능을 지원하지 않는 것이 낫다 는게 내 생각이다.
😭 글자가 커도 예쁜 UI 포기 못해
아래의 표의 희망편이 되도록 코드를 짜보자.
글자가 작을 때 | 글자가 클 때 절망편 | 글자가 클 때 희망편 |
---|---|---|
⚙️ 유저 폰트 설정 정보에 접근
우선 이걸 설정해 주기 위해서 우리는 유저가 어떠한 설정을 쓰고 있는지 알 필요가 있다.
@IBOutlet weak var mystackView: UIStackView!
override func viewDidLoad() {
super.viewDidLoad()
displayExpoInfo()
let category = UIApplication.shared.preferredContentSizeCategory
}
UIApplication
객체의 싱글톤을 사용해 preferredContentSizeCategory
를 가져온다.category
의 타입은 UIContentSizeCategory
이다. (구조체로 되어있고 사이즈 정보가 static String 으로 지정되 있다.)
♻️ 폰트 사이즈에 따른 UI 변경
@IBOutlet weak var mystackView: UIStackView!
override func viewDidLoad() {
super.viewDidLoad()
displayExpoInfo()
let category = UIApplication.shared.preferredContentSizeCategory
// 😉 여기부터
switch category {
case UIContentSizeCategory.accessibilityExtraLarge,
UIContentSizeCategory.accessibilityExtraExtraLarge,
UIContentSizeCategory.accessibilityExtraExtraExtraLarge:
mystackView.axis = .vertical
default:
mystackView.axis = .horizontal
}
}
UIContentSizeCategory
구현부를 보니 Equtable 을 채택하고 있어서 직접 비교할 수 있을 것 같다.
switch 문을 사용해서 특정사이즈 이상이면 스택뷰가 vertical 로 바뀌도록 설정해 주었다.
👆🏻 동적으로 사용자가 폰트 사이즈를 변경할 때
이것까지 지원해 주어야 하나 싶긴 하지만,
만약 사용자가 앱을 켠 상태로 손쉬운 사용 설정을 변경한다면,
위에서 짠 코드는 ViewDidLoad 에서 구현되어 있어서 실행되지 않는다.
traitCollectionDidChange
라는 메서드는 유저가 손쉬운 사용 설정을 변경하면 호출되는 메서드이다.
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
print("손쉬운 사용에서 설정을 변경하면 이 메서드가 실행됨.")
}
이 메서드를 오버라이딩해서 여기에 구현해주면 된다.
위의 기능을 이용하면, 사진이 있는 테이블 뷰에서 폰트 사이즈를 어느 크기 이상 키우면 사진이 안보이게 된다거나 이러한 설정도 해줄 수 있을 것 같다.
접근성 지원을 미루는 일, 인종차별입니다.
preferredContentSizeCategory 메서드 사용법을 알려준 곳
'🍎 iOS > 🍏 UIKit' 카테고리의 다른 글
[UIKit] App life cycle 이란? (0) | 2023.01.27 |
---|---|
[iOS] 키보드야 텍스트 가리지마 (0) | 2023.01.06 |
[iOS] delegate 구현하기 (0) | 2023.01.06 |
[iOS] Notification Center 구현하기 (0) | 2023.01.06 |
KVO 구현하기 (0) | 2023.01.05 |