iOS開發之字型大小適配實現

來源:互聯網
上載者:User

一個iOS開發項目無外乎就是純程式碼布局、xib或SB布局。那麼如何?兩個方式的字型大小適配呢。 字型大小適配------純程式碼 定義一個宏定義如下:

#define SizeScale (SCREEN_WIDTH != 414 ?1 :1.2)

#define kFont(value) [UIFont systemFontOfSize:value * SizeScale]

宏中的1.2是在plus下的大小放大比例。

純程式碼中設定字型大小通過使用這個宏來實現整體適配

字型大小適配------xib或SB 字型大小適配無外乎就是設定UIButton、UILabel、UITextView、UITextField的字型大小 通過建立這幾個的類目來實現(Runtime方式的黑魔法method swizzling) 廢話不多說,直接上代碼: .h

#import <UIKit/UIKit.h>

#import <objc/runtime.h>



/**

 *  button

 */

@interface UIButton (MyFont)


@end



/**

 *  Label

 */

@interface UILabel (myFont)


@end


/**

 *  TextField

 */


@interface UITextField (myFont)


@end


/**

 *  TextView

 */

@interface UITextView (myFont)


@end


.m

#import "UIButton+MyFont.h"


//不同裝置的螢幕比例(當然倍數可以自己控制)


@implementation UIButton (MyFont)


+ (void)load{

    Method imp = class_getInstanceMethod([selfclass], @selector(initWithCoder:));

    Method myImp = class_getInstanceMethod([selfclass], @selector(myInitWithCoder:));

    method_exchangeImplementations(imp, myImp);

}


- (id)myInitWithCoder:(NSCoder*)aDecode{

    [self myInitWithCoder:aDecode];

    if (self) {

                

        //部分不像改變字型的把tag值設定成333跳過

        if(self.titleLabel.tag !=333){

            CGFloat fontSize =self.titleLabel.font.pointSize;

            self.titleLabel.font = [UIFontsystemFontOfSize:fontSize * SizeScale];

        }

    }

    return self;

}


@end



@implementation UILabel (myFont)


+ (void)load{

    Method imp = class_getInstanceMethod([selfclass], @selector(initWithCoder:));

    Method myImp = class_getInstanceMethod([selfclass], @selector(myInitWithCoder:));

    method_exchangeImplementations(imp, myImp);

}


- (id)myInitWithCoder:(NSCoder*)aDecode{

    [self myInitWithCoder:aDecode];

    if (self) {

        //部分不像改變字型的把tag值設定成333跳過

        if(self.tag !=333){

            CGFloat fontSize =self.font.pointSize;

            self.font = [UIFontsystemFontOfSize:fontSize * SizeScale];

        }

    }

    return self;

}


@end


@implementation UITextField (myFont)


+ (void)load{

    Method imp = class_getInstanceMethod([selfclass], @selector(initWithCoder:));

    Method myImp = class_getInstanceMethod([selfclass], @selector(myInitWithCoder:));

    method_exchangeImplementations(imp, myImp);

}


- (id)myInitWithCoder:(NSCoder*)aDecode{

    [self myInitWithCoder:aDecode];

    if (self) {

        //部分不像改變字型的把tag值設定成333跳過

        if(self.tag !=333){

            CGFloat fontSize =self.font.pointSize;

            self.font = [UIFontsystemFontOfSize:fontSize * SizeScale];

        }

    }

    return self;

}


@end


@implementation UITextView (myFont)


+ (void)load{

    Method imp = class_getInstanceMethod([selfclass], @selector(initWithCoder:));

    Method myImp = class_getInstanceMethod([selfclass], @selector(myInitWithCoder:));

    method_exchangeImplementations(imp, myImp);

}


- (id)myInitWithCoder:(NSCoder*)aDecode{

    [self myInitWithCoder:aDecode];

    if (self) {

        //部分不像改變字型的把tag值設定成333跳過

        if(self.tag !=333){

            CGFloat fontSize =self.font.pointSize;

            self.font = [UIFontsystemFontOfSize:fontSize * SizeScale];

        }

    }

    return self;

}


@end

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.