Jak przestrzegać wymiarów ułatwień dostępu typu dynamicznego z czcionką niestandardową w scenorysie systemu iOS


Jak mogę używać

Dynamiczny typ stylu tekstu
https://developer.apple.com/li ... -SW65
„Tytuł 1” i ustawić krój czcionki na wbudowaną czcionkę tablicy SE dla UILabel w serii ujęć?
Muszę honorować dynamiczny typ rozmiaru w IOS (Apple zachęca go, ponieważ IOS 7?) Muszę również użyć wbudowanej czcionki Chalkboard SE, który nie jest używany domyślnie dla czcionek "Style tekstowe". Obecnie używam niestandardowej czcionki, jak pokazano na rysunku, ale potrzebuję czcionki do zmiany

Rozmiar zgodnie z preferencjami użytkownika

typ dynamiczny

/ specjalne

możliwości jak wszyscy

styl czcionki

tekst. Najlepsza opcja

style tekstu

to A.

Nagłówek 1

ale czcionka/czcionka jest nieprawidłowa.
https://i.stack.imgur.com/J7KpU.png
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Chociaż nie możesz określić zarówno niestandardowej czcionki, jak i preferowanego stylu tekstu za pomocą scenorysu, nietrudno jest programowo określić dynamiczny rozmiar czcionki dla niestandardowej czcionki:

Swift

:
let pointSize = UIFontDescriptor.preferredFontDescriptorWithTextStyle(UIFont‌​TextStyleTitle1).poi‌​ntSize
let customFont = UIFont(name: "Chalkboard SE", size: pointSize)

Gdy otrzymasz
UIContentSizeCategoryDidChangeNotification
, użyj tego samego kodu, aby zaktualizować czcionkę etykiety.

Parametr Obj C.

:
CGFloat pointSize = [[UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleHeadline] pointSize];
[titleLabel setFont:[UIFont fontWithName:@"Marker Felt" size:pointSize]];
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Musimy dodać wszystkie powiązane rozszerzenia UIFramework, dla których musimy użyć dynamicznego rozmiaru czcionki niestandardowej czcionki w iOS-11 +, takich jak UILabel, UIButton, UITextField, UITextView. Kod podano w szybkiej wersji 4.2. Musimy tylko użyć tych niestandardowych klas zamiast natywnych klas ios, aby zobaczyć efekt dynamicznych czcionek w aplikacji.
Oto pierwsza etykieta:
class AppLabel: UILabel {override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if #available(iOS 11.0, *) { self.font = UIFontMetrics.default.scaledFont(for: self.font)
self.adjustsFontForContentSizeCategory = true
// Fallback on earlier versions
} else {
// Fallback on earlier versions
}
}}

Oto 2nd to Uibutton:
class AppButton: UIButton {override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if #available(iOS 11.0, *) { self.titleLabel?.font = UIFontMetrics.default.scaledFont(for: self.titleLabel?.font ?? UIFont())
self.titleLabel?.adjustsFontForContentSizeCategory = true
} else {
// Fallback on earlier versions
}
}
}

Oto trzecie pole UITextField:
class AppTextField: UITextField {
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if #available(iOS 11.0, *) { self.font = UIFontMetrics.default.scaledFont(for: self.font ?? UIFont())
self.adjustsFontForContentSizeCategory = true
} else {
// Fallback on earlier versions
}
}
}

Najnowsze w UITextView roku:
class AppTextView: UITextView {override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if #available(iOS 11.0, *) { self.font = UIFontMetrics.default.scaledFont(for: self.font ?? UIFont())
self.adjustsFontForContentSizeCategory = true
} else {
// Fallback on earlier versions
}
}
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wypróbuj moje rozwiązanie bez konieczności słuchania

NSNotification.Name.UIContentSizeCategoryDidChange

.
Po prostu zastąp

traitCollectionDidChange

na dowolnym UIView lub UITableViewCell i zaktualizuj/oblicz rozmiar czcionki przy użyciu podobnego TextStyle.
Możesz po prostu przetestować to za pomocą dowolnego symulowanego urządzenia i

inspektor specjalny

funkcje w systemie macOS.
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection) let pointSize = UIFontDescriptor.preferredFontDescriptor(withTextStyle: .title1).pointSize
titleLabel.font = titleLabel.font.withSize(pointSize)
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się