W systemie iOS 8 możemy zaprojektować inny układ interfejsu użytkownika dla każdej klasy wielkości. Problem, przed którym stoję, to zaprojektowałem układ dla kompaktowej szerokości i regularnej wysokości (klasa rozmiaru dla wszystkich iPhone'ów w orientacji pionowej), ale chcę, aby rozmiar czcionki etykiet był mniejszy dla urządzeń 3,5 i 4-calowych (iPhone 4 i 5), a następnie względnie większy dla 4,7 cala (iPhone 6) i większy dla urządzeń 5,5 cala (iPhone 6 Plus). Szukałem, ale nie mogę znaleźć rozwiązania, by ustawić inny rozmiar czcionki dla różnych urządzeń w tej samej klasie wielkości.iOS Różne rozmiary czcionek w ramach klasy pojedynczego rozmiaru dla różnych urządzeń
Odpowiedz
Klasy układu i rozmiaru nie są ukierunkowane na określone rozmiary ekranu, ponieważ nie są do tego przeznaczone. Apple nie chce, abyś kierował reklamy na urządzenia, które pomogą Ci lepiej zarządzać kodem.
Powiedz, że pojawi się nowy model telefonu iPhone, jeśli używasz Automatycznego układania i klasy rozmiarów, nie musisz ręcznie naprawiać wszystkich ograniczeń, aby aplikacja była kompatybilna z tym nowszym urządzeniem. Jednak nadal można ustawić rozmiar czcionki UILabel
stosując następujący kod:
if UIScreen.mainScreen().bounds.size.height == 480 {
// iPhone 4
label.font = label.font.fontWithSize(20)
} else if UIScreen.mainScreen().bounds.size.height == 568 {
// IPhone 5
label.font = label.font.fontWithSize(20)
} else if UIScreen.mainScreen().bounds.size.width == 375 {
// iPhone 6
label.font = label.font.fontWithSize(20)
} else if UIScreen.mainScreen().bounds.size.width == 414 {
// iPhone 6+
label.font = label.font.fontWithSize(20)
} else if UIScreen.mainScreen().bounds.size.width == 768 {
// iPad
label.font = label.font.fontWithSize(20)
}
dwa sposoby:
1) wprowadzić ręcznie metody w delegata aplikacji, dzielić jego przedmiotu i wywołać metodę.
np
var device = UIDevice.currentDevice().model
if (device == "iPhone" || device == "iPhone Simulator" || device == "iPod touch")
{
labelboarder.frame = CGRectMake(0,self.usernameTF.frame.height-10, self.usernameTF.frame.width, 1)
labelboarder1.frame = CGRectMake(0,self.usernameTF.frame.height-10, self.usernameTF.frame.width,1)
}
else
{
labelboarder.frame = CGRectMake(0,self.usernameTF.frame.height, 500, 1)
labelboarder1.frame = CGRectMake(0,self.usernameTF.frame.height, 500,1)
}
2) Na każdym elemencie interfejsu użytkownika, przejdź do atrybutów inspektora zadeklarować czcionki.
(znajduje się znak + widoczny po lewej stronie pola rozmiaru czcionki. Kliknij na niego, wybierz klasę rozmiar pasujący i deklarować rozmiaru czcionki.)
Druga opcja to wygodne dla mnie. Happy Coding!
Pytanie brzmiało: "Jak ustawić inny rozmiar czcionki dla różnych urządzeń w tej samej klasie wielkości". Twój komentarz nie odpowiada na to pytanie. – Maverick
Jak to zrobić na iPhone6 Plus? Czcionki iPhone6 Plus wyglądają na małe w porównaniu do iPhone5 Telefon iPhone5 i iPhone6Plus mają te same klasy rozmiarów h- Companct v- Regular –
@ Maverick: Ustawianie różnych rozmiarów czcionek dla elementów interfejsu użytkownika na podstawie rozmiaru ekranu urządzenia nie jest dobrą praktyką. Tekst powinien być czytelny i czysty. Proszę zapoznać się z Wytycznymi dotyczącymi interfejsu użytkownika dla Apple. Tak, możemy ustawić inny rozmiar czcionki dla różnych klas wielkości - zalecane. –
Możesz osiągnąć pożądany efekt jak poniżej.
Usage :
zamiast stosowania 14 jako wielkość czcionkimożna wykorzystać 14.fontSize
, to zmienił się na urządzenie, zależy od ciebie wartości delta.
Nie ma potrzeby dodawania warunków everyWhere w kodzie. Tylko jeden raz, jak poniżej.
Zastosowanie: UIFont.font_medium(12.fontSize)
UIFont rozszerzenie:
extension UIFont {
class func font_medium(_ size : CGFloat) -> UIFont {
return UIFont(name: "EncodeSans-Medium", size: size)!;
}
}
UIDevice Rozszerzenie:
extension UIDevice {
enum DeviceTypes {
case iPhone4_4s
case iPhone5_5s
case iPhone6_6s
case iPhone6p_6ps
case after_iPhone6p_6ps
}
static var deviceType : DeviceTypes {
switch UIScreen.main.height {
case 480.0:
return .iPhone4_4s
case 568.0:
return .iPhone5_5s
case 667.0:
return .iPhone6_6s
case 736.0:
return .iPhone6p_6ps
default:
return .after_iPhone6p_6ps
}
}
}
Int Rozszerzenie:
extension Int{
var fontSize : CGFloat {
var deltaSize : CGFloat = 0;
switch (UIDevice.deviceType) {
case .iPhone4_4s,
.iPhone5_5s :
deltaSize = -1;
case .iPhone6_6s :
deltaSize = 2;
case .iPhone6p_6ps :
deltaSize = 2;
default:
deltaSize = 0;
}
let selfValue = self;
return CGFloat(selfValue) + deltaSize;
}
}
Tworzenie tak,
#define VIEWHEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define VIEWWIDTH ([[UIScreen mainScreen] bounds].size.width)
#define FONTNAME_LIGHT @"AppleSDGothicNeo-Regular"
#define FONTNAME_BOLD @"AppleSDGothicNeo-Bold"
#define LFONT_16 [UIFont fontWithName:FONTNAME_LIGHT size:16]
po tym, w którym chcesz zmienić czcionkę etykiety możemy napisać prosty przypadek Przełącznik
switch ((VIEWHEIGHT == 568)?1:((VIEWHEIGHT == 667)?2:3)) {
case 1:{
boldFont = BFONT_16;
}
break;
case 2:{
privacyFont = LFONT_18;
boldFont = BFONT_18;
}
break;
default:{
privacyFont = LFONT_20;
boldFont = BFONT_20;
}
break;
}
mam posługiwaniu się nim w projekcie w Swift 3 i powyżej użyciu klasy UILabel niestandardowy, UILabel rozszerzenie i Rozszerzenie UIDevice jako rozwiązanie ogólne.
UIDevice przedłużenie dostać screenType
:
public extension UIDevice {
var iPhone: Bool {
return UIDevice().userInterfaceIdiom == .phone
}
enum ScreenType: String {
case iPhone4
case iPhone5
case iPhone6
case iPhone6Plus
case iPhoneX
case Unknown
}
var screenType: ScreenType {
guard iPhone else { return .Unknown}
switch UIScreen.main.nativeBounds.height {
case 960:
return .iPhone4
case 1136:
return .iPhone5
case 1334:
return .iPhone6
case 2208:
return .iPhone6Plus
case 2436:
return .iPhoneX
default:
return .Unknown
}
}
}
Poniżej rozszerzenie UILabel który wykorzystuje screenType
aby dostosować rozmiar czcionki. Metoda adjustsFontSizeToFitDevice
może zostać dodana w również w klasie niestandardowej UILabel, ale dodałem ją do rozszerzenia UILabel, aby była dostępna ze wszystkich typów instancji UILabel.
stałą „2” stosowane w adjustsFontSizeToFitDevice
sposobu może być zmieniona do dowolnej liczby. Moją logiką jest rozważenie iPhone'a 6/7/8 jako domyślnej rozdzielczości i nadanie odpowiedniej wielkości czcionki (w Storyboard) każdej etykiecie dla tej rozdzielczości. Następnie dodaję 2 punkty dla iPhone X i iPhone 6/7/8 Plus, a odejmuję 2 punkty dla iPhone 4/5.
extension UILabel {
func adjustsFontSizeToFitDevice() {
switch UIDevice().screenType {
case .iPhone4, .iPhone5:
font = font.withSize(font.pointSize - 2)
break
case .iPhone6Plus, .iPhoneX:
font = font.withSize(font.pointSize + 2)
break
default:
font = font.withSize(font.pointSize)
}
}
}
Wreszcie UILabel zwyczaj klasa zastosować regulację czcionki wszystkich etykiet, które są sub-klasyfikowane z MyCustomLabel
.
class MyCustomLabel: UILabel {
// MARK: - Life Cycle Methods
override func awakeFromNib() {
super.awakeFromNib()
adjustsFontSizeToFitDevice()
}
}
Zastosowanie: W ujęć, podklasa wszystkie te przypadki UILabel z MyCustomLabel
których rozmiar czcionki musi być regulowana w zależności od wielkości urządzenia.
Zamiast pisania kodu dla każdej etykiety, nie tylko rozszerzyć swoją klasę etykieta z niestandardowej klasy etykiet jak poniżej, a zostanie ona automatycznie skali na podstawie uchwały urządzenia współczynnik skalowania:
#define SCALE_FACTOR_H ([UIScreen mainScreen].bounds.size.height/568)
CustomLabel.h
#import <UIKit/UIKit.h>
@interface CustomLabel : UILabel
@end
CustomLabel.m
#import "CustomLabel.h"
@implementation CustomLabel
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
- (id)initWithCoder:(NSCoder *)aDecoder {
if((self = [super initWithCoder:aDecoder])){
[self layoutIfNeeded];
[self configurefont];
}
return self;
}
- (void) configurefont {
CGFloat newFontSize = (self.font.pointSize * SCALE_FACTOR_H);
self.font = [UIFont fontWithName:self.font.fontName size:newFontSize];
}
@end
ów sposób, w jaki to zrobiłem. Jest napisany w Swift 4 :)
enum DeviceSize {
case big, medium, small
}
protocol Fontadjustable {
var devicetype: DeviceSize { get }
func adjustFontSizeForDevice()
}
extension UILabel: Fontadjustable {
var devicetype: DeviceSize {
switch UIScreen.main.nativeBounds.height {
case 1136:
return .small
case 1334:
return .medium
case 2208:
return .big
case 2436:
return .big
default:
return .big
}
}
func adjustFontSizeForDevice() {
switch self.devicetype {
case .small:
self.font = font.withSize(font.pointSize)
case .medium:
self.font = font.withSize(font.pointSize + 5)
case .big:
self.font = font.withSize(font.pointSize + 10)
}
}
}
Użycie: „Szukałem, ale nie może znaleźć rozwiązanie, aby ustawić inny rozmiar czcionki dla różnych urządzeń w obrębie tej samej klasy wielkości” myawesomeLabel.adjustFontSizeForDevice()
- 1. Różne ustawienia dla różnych urządzeń?
- 2. Domyślne rozmiary czcionek MATLAB
- 3. Ustawianie różnych czcionek dla różnych stanów UIButton
- 4. Niespójne rozmiary czcionek na smartfonie
- 5. Jak kontrolować rozmiary czcionek w grafice pgf/tikz w lateksie?
- 6. PyQt: Jak ustawić różne rozmiary nagłówków dla poszczególnych nagłówków?
- 7. Różne twarze i rozmiary czcionek w obrębie wpisów w etykietach w ggplot2
- 8. ABAddressBookCopyArrayOfAllPeople i ABAddressBookGetPersonCount zwracają różne rozmiary
- 9. Galeria pływających miniatur, różne rozmiary, jak sobie poradzić?
- 10. Dzienniki urządzeń dla bluetooth w systemie iOS
- 11. Różne tła dla różnych stanów UI-router
- 12. Uniwersalna aplikacja Xcode iOS Image Rozmiary obrazu
- 13. Skalowanie rozmiarów ekranu aplikacji internetowych dla różnych urządzeń
- 14. wielkość i objdump zgłaszać różne rozmiary dla segmentu tekstu
- 15. Różne konstrukcje Androida dla różnych środowisk
- 16. XCode Różne zasoby dla różnych celów
- 17. Różne limity czasu sesji dla różnych użytkowników
- 18. Odpowiednik iOS dla urządzeń z Androidem SharedPreferences
- 19. w Amazon lambda rozmiaru różne rozmiary miniaturek równolegle async zgłasza błąd: strumień daje pusty bufor
- 20. Różne wyniki w różnych systemach
- 21. Jak ustawić różne wiązania Auto Layout dla różnych rozmiarów ekranów
- 22. Mock klasy w ramach testu
- 23. Czy istnieje sposób określania różnych nazw wyświetlanych pakietów dla różnych urządzeń z systemem iOS w aplikacji uniwersalnej?
- 24. Xcode - jak ustawić różne identyfikatory pakietów dla różnych konfiguracji kompilacji?
- 25. Aliasy dla czcionek w CSS
- 26. Zmienianie rodziny czcionek i rozmiaru dla aplikacji WinForm
- 27. Czy możemy ustawić różne layouty w różnych sekcjach w ramach UICollectionView?
- 28. Zmiana rozmiaru czcionki i rodziny czcionek dla iFrame
- 29. Różne statusy Ajax dla różnych komponentów w PrimeFaces
- 30. Jak zastosować różne opcje kompilatora dla różnych kompilatorów w cmake?
Masz całkowitą rację - nie ma prostego rozwiązania (prawdopodobnie dlatego, że Apple tak naprawdę nie chce, abyś to robił). Jeśli jest to naprawdę ważne, musisz użyć kodu do wykrycia rozmiaru ekranu i zmienić odpowiednio rozmiar czcionki na etykiecie. – matt
Dzięki matowy, wystarczy, że sprawdzę moje zrozumienie. – Maverick
To nie jest jednak nierozsądny pomysł. Powinieneś złożyć prośbę o ulepszenie w Apple. Klasy wielkości są zbyt gruboziarniste ... – matt