Dynamic Type ist gut, funktioniert aber nicht immer. Jetzt werde ich Ihnen sagen, wie kleine Steuerelemente in iOS 13 ohne Registrierung und SMS kostenlos erhöht werden.
In einem
früheren Artikel haben wir den Dynamiktyp aus dem Menü der Dodo Pizza iOS-Anwendung gezogen. Es ist ziemlich gut geworden. Die Registerkartenleiste unter dem Menü war jedoch so klein wie sie war - sie ändert sich je nach Einstellung der Textgröße nicht.
Diese Funktion hat die Veröffentlichung noch nicht erreicht, wofür ich mich schäme und schäme"Aber wie ist es, Dodo?" Interessieren Sie sich nicht für sehbehinderte Menschen?
- Entschuldigung!
Ein wenig über den eingebauten Modus "Lupe"
Die System-Registerkartenleiste zeigt eine Vorschau jeder Registerkarte bei langem Tippen. Versuchen Sie, die „verfügbare“ Textgröße anzugeben, und drücken Sie dann lange auf eine beliebige Registerkarte auf der Systemregisterkarte (z. B. in Musik oder Foto). Das folgende Popup wird auf dem Bildschirm angezeigt:
Neben der Registerkartenleiste wird der Vergrößerungsmodus durch Schaltflächen in den Navigationsleisten und Symbolleisten unterstützt:
Suchfelder:
Und noch ein paar Kontrollen.
Ab iOS 13 können wir unseren Steuerelementen problemlos dasselbe Verhalten hinzufügen.
So befestigen Sie UILargeContentViewerItem an der Anwendung
Leider ist dieses Protokoll in der Dokumentation eher schlecht beschrieben, aber das spielt keine Rolle, da seine API ziemlich einfach aussieht:
@available(iOS 13.0, *) public protocol UILargeContentViewerItem : NSObjectProtocol { var showsLargeContentViewer: Bool { get } var largeContentTitle: String? { get } var largeContentImage: UIImage? { get } var scalesLargeContentImage: Bool { get } var largeContentImageInsets: UIEdgeInsets { get } }
Es reicht aus, mehrere dieser Methoden zu implementieren, deren Namen für sich sprechen, und Ihr Steuerelement zeigt bei langem Tippen eine große Vorschau an.
Sehr einfache Implementierung
Versuchen wir dieses Protokoll auf einer Schaltfläche in der Anwendung. Zum Beispiel auf der Schaltfläche
i
auf der Produktkarte:
Fügen Sie 3 Codezeilen hinzu:
nutritionButton.showsLargeContentViewer = true nutritionButton.addInteraction(UILargeContentViewerInteraction()) nutritionButton.largeContentTitle = nutritionButton.accessibilityValue
Fertig. Cool, oder?
Nur hier ist das gerade Symbol, das standardmäßig gezogen wird, gefällt mir nicht. Es ist besser, wenn es nicht zweifarbig ist, sondern einfarbig mit der ausgeschnittenen Form des Buchstabens
i
. Dies wird nur für den Status der hervorgehobenen Schaltfläche verwendet.
nutritionButton.largeContentImage = nutritionButton.image(for: .highlighted)
Norm
Und jetzt kommen wir zur Erweiterung:
extension UIView { public func enableLargeContent(title: String? = nil, image: UIImage? = nil, scales: Bool = true, insets: UIEdgeInsets = .zero) { guard !showsLargeContentViewer else { return } showsLargeContentViewer = true addInteraction(UILargeContentViewerInteraction()) largeContentTitle = title largeContentImage = image scalesLargeContentImage = scales largeContentImageInsets = insets } }
nutritionButton.enableLargeContent(title: nutritionButton.accessibilityValue, image: nutritionButton.image(for: .highlighted))
Tatsächlich implementieren viele Standard-iOS-Steuerelemente bereits einige der Methoden dieses Protokolls. Und dieser Modus ist deaktiviert, weil Sie versuchen müssen, den Inhalt wirklich zu erhöhen, anstatt alles hinter einer Lupe zu verstecken.
Ich formuliere um: Verwenden Sie diese Funktion nur als letzten Ausweg, wenn Sie die Kontrolle überhaupt nicht erhöhen können.
Die Dokumentation für diese ganze Sache ist in Xcode verfügbar, wenn Sie die UILargeContentViewerItem
Schnittstelle öffnen.
Demo-Projekt in meinem
Repo auf GitHub