В iOS 8 мы можем разработать различные макеты пользовательского интерфейса для каждого класса размеров. Проблема, с которой я столкнулся, я разработал макет для Compact Width и Regular Height (класс размера для всех iPhone в портрете), но я хочу, чтобы размер шрифтов меньшего размера для устройств размером 3,5 и 4 дюйма (iPhone 4 и 5), а затем относительно больше для 4,7 дюйма (iPhone 6) и более крупных для 5,5-дюймовых (iPhone 6 Plus) устройств. Я искал, но не смог найти решение для установки другого размера шрифта для разных устройств в пределах того же класса.iOS Различные размеры шрифта в одном классе размеров для разных устройств
ответ
Автоматические макеты и классы размера не предназначены для конкретных размеров экрана, поскольку они не предназначены для этого. Apple не хочет, чтобы вы настраивали таргетинг на устройства, чтобы лучше поддерживать ваш код.
Скажите, что новая модель iPhone выходит, если вы используете автоматические макеты и классы размеров, вам не нужно исправлять все ограничения вручную, чтобы ваше приложение совместимо с этим более новым устройством. Тем не менее, вы можете установить размер шрифта UILabel
, используя следующий код:
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)
}
два способов:
1) Вручную сделать метод в приложении делегата, разделяющий его объект и вызов метод.
например:
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) На каждый пункт пользовательского интерфейса, перейдите к атрибутам инспектору, объявить шрифт.
(Существует + знак виден слева от поля размера шрифта. Нажмите на него, выбрать класс соответствующий размер и объявить размер шрифта.)
Второй вариант удобен для меня. Счастливое кодирование!
Вопрос был: «Как установить другой размер шрифта для разных устройств в пределах того же класса размера». Ваш комментарий не отвечает на это. – Maverick
Как вы это делаете на iPhone6 Plus? Шрифты iPhone6 Plus выглядят небольшими по сравнению с iPhone5 Портфолио iPhone5 и iPhone6Plus имеют одинаковые классы размеров h- Companct v- Regular –
@ Maverick: Установка разного размера шрифта для элементов пользовательского интерфейса на основе размера экрана устройства не является хорошей практикой. Текст должен быть на читаемом шрифте и очищаться. Пожалуйста, ознакомьтесь с Руководством пользователя по пользовательскому интерфейсу Apple. Да, мы можем установить другой размер шрифта для разных классов размеров - рекомендуется. –
Вы можете добиться желаемого эффекта, как показано ниже.
Usage :
вместо 14, как размер шрифтавы можете использовать 14.fontSize
, он будет изменен в соответствии с устройством, зависит от вас дельта значения.
Не нужно добавлять условия каждый в коде. Только один раз, как показано ниже.
Использование: UIFont.font_medium(12.fontSize)
UIFont расширение:
extension UIFont {
class func font_medium(_ size : CGFloat) -> UIFont {
return UIFont(name: "EncodeSans-Medium", size: size)!;
}
}
UIDevice Расширение:
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 Расширение:
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;
}
}
Создать, как это,
#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]
после того, где вы хотите изменить метки шрифт можно написать простой переключатель случай
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;
}
Я обработки его в проекте в Swift 3 и выше с использованием UILabel Пользовательский класс, Расширение UILabel и Расширение UIDevice в качестве общего решения.
расширение UIDevice получить 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
}
}
}
Ниже расширениеUILabel, который использует screenType
для настройки размера шрифта. adjustsFontSizeToFitDevice
метод может быть добавлен в UILabel пользовательский класс тоже, но я положил его в Расширение UILabel, чтобы сделать его доступным из всех типов экземпляров UILabel.
Константа «2», используемая в методе adjustsFontSizeToFitDevice
, может быть изменена на любое желаемое число. Моя логика заключается в том, чтобы рассматривать iPhone 6/7/8 как разрешение по умолчанию и предоставлять подходящий размер шрифта (в Storyboard) на каждую метку для этого разрешения. Затем я добавляю 2 очка для iPhone X и iPhone 6/7/8 Plus, тогда как вычитание 2 очков для 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)
}
}
}
Наконец UILabel пользовательский класс применить настройку шрифта для всех меток, которые к югу от классифицируется MyCustomLabel
.
class MyCustomLabel: UILabel {
// MARK: - Life Cycle Methods
override func awakeFromNib() {
super.awakeFromNib()
adjustsFontSizeToFitDevice()
}
}
Использование: В раскадровке, суб-класс все эти экземпляры UILabel из MyCustomLabel
чьих размера шрифта должны быть скорректированы в зависимости от размера устройства.
Вместо написания кода для каждой этикетки, не только расширить класс этикетки с вашего пользовательского класса этикетки, как показано ниже, и она будет автоматически масштабировать на основе разрешения устройства коэффициент масштабирования:
#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
То будет как я это сделал. Это написано в 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)
}
}
}
ПРИМЕНЕНИЕ: myawesomeLabel.adjustFontSizeForDevice()
- 1. Различные размеры шрифтов для разных размеров экрана
- 2. Различные размеры шрифта для разных устройств в Xcode 6
- 3. Размеры изображений для разных устройств iOS
- 4. Пользовательские размеры размеров для разных устройств
- 5. Различные размеры TextView для разных устройств
- 6. Различные размеры шрифта в одном поле
- 7. Различные размеры шрифта на разных устройствах такого же класса
- 8. Различные настройки для разных устройств?
- 9. Различные конструкции для разных устройств ios
- 10. Размеры экрана для Android для разных устройств
- 11. Установите различные размеры шрифта для разных строк в текстовом поле
- 12. Различные наконечники для разных устройств
- 13. XCode: Различные пользовательские интерфейсы для разных размеров устройств
- 14. Значения ограничений автоматической компоновки iOS для разных размеров устройств
- 15. iOS - Auto Layout vs Различные раскадровки для разных размеров экрана
- 16. Как я могу получить размеры UIImageView, поскольку он динамически отображается в любом классе размеров iOS-устройств?
- 17. Размеры рекламы для устройств iOS
- 18. Различные CSS для разных размеров экрана?
- 19. размеры для разных размеров экрана в андроиде
- 20. Различные датпикеры для разных устройств
- 21. Различные сетки разных размеров
- 22. iOS- В том числе различные размеры изображения для разных размеров дисплея
- 23. Как установить размер шрифта для разных размеров iPhone?
- 24. Использовать различные разрешения изображений для разных устройств iOS
- 25. Размер шрифта для разных устройств плотности
- 26. sIFR: Различные размеры шрифта, полученные
- 27. Различные форматы даты для разных размеров экрана
- 28. Как установить размеры UIImageView разных размеров для разных устройств в UITableViewCell?
- 29. Различные заказы на навигацию для разных устройств
- 30. Веб-сайт для разных размеров мобильных устройств
«Я искал, но не смог найти решение, чтобы установить другой размер шрифта для различных устройств в одном размерном классе.» Вы совершенно правы - нет простого решения (предположительно, потому что Apple действительно не хочет, чтобы вы это делали). Если это действительно важно для вас, вам придется использовать код для определения размера экрана и соответственно изменить размер шрифта на этикетке. – matt
Спасибо, матовый, мне просто нужно было проверить мое понимание. – Maverick
Это не необоснованная идея. Вы должны подать запрос об улучшении с помощью Apple. Размерные классы слишком грубые ... – matt