Wir entwickeln eine App für iOS7 und unser Designer möchte nicht standardmäßige Schriftart (Avenir) verwenden, aber ich möchte nicht verlieren Dynamic Type-Funktionalität. Wie ich es verstehe Dynamischer Typ kann nur mit Standard-Systemschriftarten verwendet werden, die Helvetica Neue sind. Ist es möglich, andere Schriftarten zu verwenden oder ist dies momentan nicht möglich?iOS7: Können wir andere Schriftarten als Helvetica Neue mit Dynamic Type verwenden?
Antwort
Soweit ich verstanden [UIFont preferredFontForTextStyle:]
gibt eine Schriftart mit fester Größe für eine bestimmte Schriftart Stil unabhängig von der Textansicht Standardgröße. Ich erwarte, dass die Änderung der Textgröße in den Einstellungen die Textgröße in meiner App um ein Delta ändert, anstatt einen festen Wert festzulegen. Wie in Text Programming Guide for iOS erwähnt,
Die eigentliche Schriftart für den von einem Textstil beschriebenen Zweck verwendet wird, kann auf eine Reihe von dynamischen Überlegungen variieren, einschließlich der Inhaltsgröße Kategorie Präferenz des Nutzers, die durch die UIApplication Eigenschaft preferredContentSizeCategory vertreten ist.
Ich bemerkte, dass die Eigenschaft preferredContentSizeCategory
als Reaktion auf die Einstellung der Textgröße in den Einstellungen ändert.
Es ist auch wichtig, die UIContentSizeCategoryDidChangeNotification zu beachten, damit Sie den Text neu anordnen können, wenn der Benutzer die Inhaltsgrößenkategorie ändert. Wenn Ihre App diese Benachrichtigung erhält, sollte sie die Nachricht invalidateIntrinsicContentSize an Ansichten senden, die von Auto Layout positioniert wurden, oder setNeedsLayout an manuell positionierte Benutzeroberflächenelemente senden. Und es sollte bevorzugte Zeichensätze oder Schriftartdeskriptoren ungültig machen und nach Bedarf neue erwerben.
So ist meine Idee entsprechende Benachrichtigung zu beobachten, berechnet Delta Größe basierend auf preferredContentSizeCategory
Eigenschaft und gilt Delta Standardschriftgröße der Text-Ansicht (die in IB oder programmatisch festgelegt wurden).
PreferredFontLabel.h
@interface PreferredFontLabel : UILabel
@property (nonatomic) UIFontDescriptor *defaultFontDescriptor;
@end
PreferredFontLabel.m
#import "PreferredFontLabel.h"
#import "UIApplication+ContentSize.h"
@implementation PreferredFontLabel
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
self.defaultFontDescriptor = self.font.fontDescriptor;
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(contentSizeCategoryDidChange)
name:UIContentSizeCategoryDidChangeNotification
object:nil];
[self contentSizeCategoryDidChange];
}
- (void)setDefaultFontDescriptor:(UIFontDescriptor *)defaultFontDescriptor
{
_defaultFontDescriptor = defaultFontDescriptor;
[self contentSizeCategoryDidChange];
}
- (void)contentSizeCategoryDidChange
{
CGFloat preferredSize = [self.defaultFontDescriptor.fontAttributes[UIFontDescriptorSizeAttribute] floatValue];
preferredSize += [UIApplication sharedApplication].contentSizeDelta;
self.font = [UIFont fontWithDescriptor:self.defaultFontDescriptor size:preferredSize];
[self invalidateIntrinsicContentSize];
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIContentSizeCategoryDidChangeNotification object:nil];
}
@end
UIApplication + ContentSize.h
@interface UIApplication (ContentSize)
@property (nonatomic, readonly) NSInteger contentSizeDelta;
@end
UIApplication + ContentSize.m
#import "UIApplication+ContentSize.h"
@implementation UIApplication (ContentSize)
- (NSInteger)contentSizeDelta
{
static NSArray *contentSizeCategories;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
contentSizeCategories = @[UIContentSizeCategoryExtraSmall,
UIContentSizeCategorySmall,
UIContentSizeCategoryMedium,
UIContentSizeCategoryLarge,
UIContentSizeCategoryExtraLarge,
UIContentSizeCategoryExtraExtraLarge,
UIContentSizeCategoryExtraExtraExtraLarge
UIContentSizeCategoryAccessibilityMedium,
UIContentSizeCategoryAccessibilityLarge,
UIContentSizeCategoryAccessibilityExtraLarge,
UIContentSizeCategoryAccessibilityExtraExtraLarge,
UIContentSizeCategoryAccessibilityExtraExtraExtraLarge];
});
// assume UIContentSizeCategoryLarge is default category
NSInteger contentSizeDelta = [contentSizeCategories indexOfObject:self.preferredContentSizeCategory];
if(contentSizeDelta != NSNotFound) {
contentSizeDelta -= [contentSizeCategories indexOfObject:UIContentSizeCategoryLarge];
return contentSizeDelta;
} else {
return 0;
}
}
@end
I String Unterstützung zugeschrieben zugegeben, Demo auf GitHub
Beispiel mit benutzerdefinierter Schriftart.
https://github.com/jszumski/dynamic-type
Siehe @implementation UIFont (AvenirContentSize)
dafür, wie eine Schriftart anpassen die Standardgrößen unter NDA
- 1. Verwenden von Helvetica Neue in einer Website
- 2. Helvetica Neue Light, iOS
- 3. Helvetica Neue Light verwenden - Html5 IOS App
- 4. Können wir die neue BottomNavigationBar als temporäre Snackbar verwenden?
- 5. Xcode: Verwenden benutzerdefinierter Schriftarten in Dynamic Framework
- 6. Warum können wir 'this' als Instanzmethodenparameter verwenden?
- 7. Können wir Blackberry als GSM-Modem verwenden?
- 8. Können wir andere Such-Widget als Symbolleiste in Android haben
- 9. Django - Neue Schriftarten?
- 10. Verwenden von `type` als Datenbankspaltenname
- 11. Helvetica Neue Font Ausgabe in Firefox
- 12. Können wir Xpath mit BeautifulSoup verwenden?
- 13. Wie können wir MSHTML mit VBA verwenden?
- 14. Können wir Highcharts mit React-Native verwenden?
- 15. Können wir reactJS mit amCharts verwenden
- 16. können wir CASE mit EXEC verwenden
- 17. Können wir keine andere jdk als IBM JDK in RAD WebSphere verwenden?
- 18. Können wir & in URL verwenden?
- 19. Warum können wir C-Strings nicht als SELs verwenden?
- 20. Warum können wir nicht 192.168.1 als Subnetzmaske verwenden?
- 21. Warum verwenden wir pthread_exit(), wenn wir return verwenden können?
- 22. Können wir ember-cli rein als Frontend verwenden wie wir javascript und jquery verwenden?
- 23. Können wir in Mapreduce den Combiner als Ersatz verwenden?
- 24. Können wir den Schlüssel als IV für AES verwenden?
- 25. Wie können wir Array-Elemente als Zähler in Java verwenden?
- 26. Können wir Funktion als Return-Anweisung in Javascript verwenden?
- 27. Können wir git-cvs unter Windows verwenden?
- 28. Können wir <input type = "file"> style ändern?
- 29. Verwenden arabischer Schriftarten mit der Erweiterung .otf
- 30. UIStatusBar wie in Facebook neue iOS7 Anwendung
iOS7 ist immer noch übereinstimmen, könnte dies bedeuten, dass niemand Ihre Frage beantworten. – rckoenes
Entschuldigung, ich dachte, dass mit goldenen Master-DNA ist schon für iOS7 vorbei :) – tadasz
Nein ist es nicht, es ist sogar in der gelben Nachricht über dem GM angegeben. – rckoenes