Подтвердить что ты не робот

Класс размера для идентификации iPhone 6 и iPhone 6 плюс портрет

Как однозначно идентифицировать iPhone 6 и iPhone 6 плюс портретные экраны с использованием классов размера?

Мое приложение выглядит неплохо в iPhone 4 и iPhone 5, но те же взгляды с большим количеством пустых мест в iPhone 6 и 6 плюс из-за размеров экрана. Хотя я использую автоматический макет, я не могу увеличить размер шрифта или размер обзора только для iPhone 6 и 6 плюс один. Я знал, что мы можем изменить размер шрифта и просмотреть размер с помощью классов размера. но в моем случае не знаю, что делать.

Я использую xCode 6.1, а мое приложение поддерживает от iOS 7 до последней версии iOS 8.1. Я ожидаю решения только в раскадровки, так как я делаю свои проекты пользовательского интерфейса полностью в раскадровке. Если раскадровка имеет ограниченную функциональность для достижения моих потребностей, пожалуйста, дайте мне знать, как добиться того же самого кода с помощью приложения?

4b9b3361

Ответ 1

Другим вариантом настройки размера шрифта в соответствии с типом iPhone является использование "Атрибуты пользовательских атрибутов времени выполнения".

Определите расширение для UILabel:

extension UILabel {
    var adjustFontToRealIPhoneSize: Bool {
        set {
            if newValue {
                var currentFont = self.font
                var sizeScale: CGFloat = 1
                let model = UIDevice.CurrentDevice().modelName()

                if model == "iPhone 6" {
                    sizeScale = 1.3
                }
                else if model == "iPhone 6 Plus" {
                    sizeScale = 1.5
                }

                self.font = currentFont.fontWithSize(currentFont.pointSize * sizeScale)
            }
        }

        get {
            return false
        }
    }
}

Чтобы определить текущее название модели, обратитесь к следующему ответу: fooobar.com/questions/14935/...

На раскадровке выберите ярлык, который вы хотите настроить, откройте правую панель, выберите инспектор идентификации и добавьте свойство "adjustFontToRealIPhoneSize" в список пользовательских атрибутов времени выполнения (с типом "Boolean" и отмеченным флажком).

Сделайте то же самое для каждой метки, которую вы хотите настроить (скопировать и вставить на удивление работает здесь).

Ответ 2

Используйте компактную ширину и регулярную высоту в раскадровке

Use Compact width and Regular Height in storyboard

Добавьте ограничение компоновки высоты и ширины относительно супер-представления, добавив множитель. Скажем, у вас есть представление изображения, размер которого равен половине супер-представления, тогда добавьте множитель 0.5.

enter image description here

Ответ 3

Ознакомьтесь с настройкамиFontSizeToFitWidth @Ссылка на класс UILabel. Это позволит вам сделать некоторые приятные корректировки на основе разных устройств.

label.adjustsFontSizeToFitWidth = YES;

Ответ 4

У меня нет слишком большой идеи о sizeClass для разных размеров шрифта в разных устройствах iPhone, но я понял это решение.

  • Добавьте этот метод в свой класс утилит.
  • Просто передайте супер-просмотр этому методу, этот метод является рекурсивным, поэтому, если вы передаете self.view, то все настройки subviews установлены.
  • Измените размер шрифта, как вам нужно.
-(void)setAllFonts:(UIView *)view
{

CGFloat fontSizeDiff = 0.0;

if (IS_IPHONE_6)
{
    fontSizeDiff = 1;
}
else if (IS_IPHONE_6PLUS)
{
    fontSizeDiff = 2;
}

for (UIView *vw in [view subviews])
{
    if ([vw isKindOfClass:[UILabel class]] || [vw isKindOfClass:[UIButton class]])
    {
        if ([vw isKindOfClass:[UILabel class]])
        {
            UIFont *font = [(UILabel *)vw font];
            [(UILabel *)vw setFont:[UIFont fontWithName:font.fontName size:font.pointSize+fontSizeDiff]];
        }
        else
        {
            UIFont *font = [(UIButton *)vw titleLabel].font;
            [(UIButton *)vw titleLabel].font = [UIFont fontWithName:font.fontName size:font.pointSize+fontSizeDiff];
        }
    }
    else if ([vw isKindOfClass:[UIView class]] || [vw isKindOfClass:[UIScrollView class]])
    {
        [self setAllFonts:vw];
    }
}
}

Ответ 5

Быстрая версия ответа @iBhaviks:

func getFontScaleForDevice() -> CGFloat {
    var sizeScale = CGFloat(1.0)
    if DeviceType.IS_IPHONE_6 {
        sizeScale = 1.2
    } else if DeviceType.IS_IPHONE_6P {
        sizeScale = 1.4
    } else if DeviceType.IS_IPAD {
        sizeScale = 1.4
    }
    return sizeScale
}

func setAllFonts(targetView:UIView, scale:CGFloat) {
    for vw in targetView.subviews {
        if let vl = vw as? UILabel {
            vl.font = vl.font.fontWithSize(round(vl.font.pointSize * scale))
        } else if let vb = vw as? UIButton, vbl = vb.titleLabel {
            vbl.font = vbl.font.fontWithSize(vbl.font.pointSize * scale)
        } else if vw.subviews.count > 0 {
            setAllFonts(vw, scale: scale)
        }
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    let sizeScale = getFontScaleForDevice()
    if sizeScale > CGFloat(1.0) {
        setAllFonts(view, scale: sizeScale)
    }
    view.layoutIfNeeded()
}

Ответ 6

Возможно, вы могли бы установить идеальный размер шрифта для больших экранов, а затем установить Autoshrink в minimum font size с идеальным размером для небольших экранов, таким образом, вы можете иметь размер динамического шрифта без кодирования.

Вам нужно будет установить ограничения для ярлыка, чтобы в любом случае настроить размер его с размером экрана.

Надеемся на эту помощь

Ответ 7

После битвы только что нашел что-то для моей потребности, поэтому отправляю то же самое для будущих читателей.

  • На данный момент нет возможности однозначно идентифицировать портреты модели iPhone 6 с использованием классов размера. Однако вы можете использовать компактную ширину и правильную высоту для дизайна для всех экранов портфолио iPhone.
  • Чтобы изменить размер шрифта, вы должны определить, какой iPhone в настоящее время работает при использовании кода, и установить размер шрифта на основе того же
  • Для моего требования - такой же макет для всех размеров экрана - используйте множитель в ограничениях ширины и высоты. Проверьте ответы Jignesh на этот вопрос, чтобы узнать больше об этом.

EDIT 24-SEP-2015 Недавно я нашел способ настроить класс размера, используя UITraitColleection только для iPhone 6 плюс, поэтому вам не нужно много писать. Я надеюсь, что эта поможет кому-то в будущем.

Ответ 8

Бит поздно, но мне нужен ярлык, который масштабируется до любого устройства и использует этот метод.

Создайте новый подкласс UILabel и в .h файле поместите это...

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface OTHD_ScalableLabel : UILabel

@property (nonatomic, assign) IBInspectable CGFloat fontScale;

@end

и в .m файле поставьте это...

#import "OTHD_ScalableLabel.h"

@implementation OTHD_ScalableLabel

- (void) layoutSubviews
{
    [super layoutSubviews];

    if( self.fontScale < 0.1 || self.fontScale > 1.0 )      self.fontScale = 1.0;

    CGFloat height = CGRectGetHeight(self.bounds) * self.fontScale;

    if( height )        self.font = [UIFont fontWithName:self.font.fontName size:height];
}


@end

Затем вы можете просто изменить свой класс в IB и использовать IBInspectable, вы сможете масштабировать ярлык вверх или вниз. Очевидно, что для педантиков это не очень хорошая идея для общего использования, но есть случаи, когда вам может понадобиться, например, большой ярлык, отображающий полный экран на iPhone, а также полный экран на iPad.

Ответ 9

Вот пример функции, которую я использую для переключения между двумя разными размерами шрифта во время выполнения. Он решает, какой шрифт использовать на основе класса горизонтального размера, который по существу разделяет устройства на две группы "iPad" и "iPhone". Вот хорошая ссылка на устройства whch, принадлежащие к классам классов: http://useyourloaf.com/blog/size-classes/

  • iPad и Up
  • iPhone Plus и Down
 func chooseFont(compactFont: UIFont, regularFont: UIFont) -> UIFont {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    return appDelegate.window!.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClass.compact ? compactFont : regularFont
}

Ответ 10

На основе вашего снимка экрана я бы предложил использовать Dynamic Type. Таким образом, пользователь отвечает за размер текста.