iOS修改字型
一、目的
有些公司在專案開發中,可能應用自己定義的字型樣式,這樣就涉及了字型設定的方法了,今天在這裡用程式碼簡單演示一下,以備不時之需。
二、準備
新建一個工程ChangeFont,然後將一個DS-DIGII.TTF的字型庫拖工程中,裡面的工程目錄大概就是這樣的:
接下來我們可以在ViewController類中建立一個UILabel來顯示字型樣式:
UILabel *label = [[UILabel alloc] init];
label.frame = CGRectMake(100, 100, 160, 50);
label.backgroundColor = [UIColor yellowColor];
label.textAlignment = NSTextAlignmentCenter;
label.text = @"9876543210";
[self.view addSubview:label];
執行結果:
三、改變字型
之前已經把DS-DIGII.TTF這個檔案拖進去了,現在在plist檔案裡面配置一下。開啟plist然後加入名為Fonts provided by application的一行,在item裡把字型名字加進去。(ps:帶字尾)
在程式碼中更改字型,如下:
(ps:字型檔名稱不代表字型名稱,所以不能直接在程式碼中寫DS-DIGII.TTF檔名)
首先需要找出字型名稱,遍歷一下:
for(NSString *familyName in [UIFont familyNames]){
NSLog(@"Font FamilyName = %@",familyName); // 輸出字型族科名字
for(NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
NSLog(@"\t%@",fontName); // 輸出字型族科下字樣名字
}
}
最後找出了相對於沒有新增這個字型的工程多出的字型就是本次新增的字型了
結果:
// Font FamilyName = DS-Digital
// 2017-05-07 13:31:44.639 ChangeFont[9315:66825327] DS-Digital-Italic
換個姿勢:
據說,在 Finder 裡面找到這個TTF,雙擊開啟,也能看到這個字型名稱:
接下來測試:
UILabel *label = [[UILabel alloc] init];
label.frame = CGRectMake(100, 100, 160, 50);
label.backgroundColor = [UIColor yellowColor];
label.textAlignment = NSTextAlignmentCenter;
label.text = @"9876543210";
label.font = [UIFont fontWithName:@"DS-Digital" size:16.0f];
[self.view addSubview:label];
OK!效果改變字型在這裡就簡單的實現了。
四、深思
有沒有感覺上面的方法很lou,控制元件多了就吐血了,其實可以利用runtime的class_addMethod、class_replaceMethod、method_exchangeImplementations這幾個方法實現,程式碼如下:
class_getInstanceMethod得到類的例項方法
class_getClassMethod得到類的類方法
#import <UIKit/UIKit.h>
@interface UILabel (FontChange)
@end
#import "UILabel+FontChange.h"
#import <objc/runtime.h>
#define CustomFontName @"DS-Digital"
@implementation UILabel (FontChange)
+ (void)load {
// load方法只會走一次,這裡這裡的執行一次加不加都可以。提高容錯率
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 獲得viewController的生命週期方法的selector
SEL systemSel = @selector(willMoveToSuperview:);
// 自己實現的將要被交換的方法的selector
SEL swizzSel = @selector(myWillMoveToSuperview:);
// 兩個方法的Method
Method systemMethod = class_getInstanceMethod([self class], systemSel);
Method swizzMethod = class_getInstanceMethod([self class], swizzSel);
// 首先動態新增方法,實現是被交換的方法,返回值表示新增成功還是失敗
BOOL isAdd = class_addMethod(self, systemSel, method_getImplementation(swizzMethod), method_getTypeEncoding(swizzMethod));
if (isAdd) {
// 如果成功,說明類中不存在這個方法的實現
// 將被交換方法的實現替換到這個並不存在的實現
class_replaceMethod(self, swizzSel, method_getImplementation(systemMethod), method_getTypeEncoding(systemMethod));
} else {
// 否則,交換兩個方法的實現
method_exchangeImplementations(systemMethod, swizzMethod);
}
});
}
- (void)myWillMoveToSuperview:(UIView *)newSuperview {
[self myWillMoveToSuperview:newSuperview];
// 不改變button的title字型設定的,在這裡你可以判斷那種型別的改哪種不改,比如說你不想改button的字型,把這一句解註釋即可
// if ([self isKindOfClass:NSClassFromString(@"UIButtonLabel")]) {
// return;
// }
if (self) {
if (self.tag == 000000) {
self.font = [UIFont systemFontOfSize:self.font.pointSize];
} else {
if ([UIFont fontNamesForFamilyName:CustomFontName])
self.font = [UIFont fontWithName:CustomFontName size:self.font.pointSize];
}
}
}
@end
然後不加任何程式碼如下:
UILabel *label = [[UILabel alloc] init];
label.frame = CGRectMake(100, 100, 160, 50);
label.backgroundColor = [UIColor yellowColor];
label.textAlignment = NSTextAlignmentCenter;
label.text = @"9876543210";
// label.tag = 000000;
// label.font = [UIFont fontWithName:@"DS-Digital" size:16.0f];
[self.view addSubview:label];
這樣就可以實現了
------整理
相關文章
- iOS 修改webView字型iOSWebView
- 修改php網站字型修改,輕鬆更新網站字型樣式PHP網站
- android全域性修改字型Android
- Android中TabLayout修改字型大小AndroidTabLayout
- Spring tool suite修改字型大小SpringUI
- 如何檢視字型詳細資訊,修改字型名稱?
- Pypycharm修改程式碼字型大小及修改顏色PyCharm
- word修改公式中的部分字型公式
- 如何修改 React Native 的預設字型React Native
- 如何修改網站網頁字型,調整網站字型的方法網站網頁
- win10如何修改系統字型樣式 win10系統修改字型樣式的步驟Win10
- iOS UITableView 修改屬性iOSUIView
- win10怎麼修改字型改為宋體_Win10系統預設字型如何修改為宋體Win10
- iOS 新增自定義的字型 Fonts provided by applicationiOSIDEAPP
- 修改Debian GNU/Linux的預設等寬字型Linux
- win10如何修改字型樣式_win10怎樣更改系統字型Win10
- 如何在後臺修改網站資料?網站後臺如何修改字型?網站
- win10修改系統字型怎麼設定_如何更改win10字型Win10
- 淺談 iOS Device ID 的修改iOSdev
- iOS打包簡單修改build號iOSUI
- iOS-載入第三方字型iOS
- 如何修改matplotlib的圖例的標題的字型大小
- win10專業版如何修改字型_win10專業版怎麼更換字型Win10
- win10怎麼更換系統字型_如何修改電腦win10系統字型Win10
- win10修改字型顏色怎麼操作 windows10字型顏色設定方法Win10Windows
- Windows10系統怎麼修改edge瀏覽器字型Windows瀏覽器
- win10字型大小怎麼調 win10系統修改字型大小方法介紹Win10
- iOS使用shell指令碼批量修改屬性iOS指令碼
- 搭建自己的直播平臺,修改cell刪除按鈕字型大小
- iOS 怎麼修改UITabBarItem角標badge顏色iOSUItabBar
- iOS使用Shell指令碼批量修改類名稱iOS指令碼
- 直播系統原始碼,修改ToolBar的標題的字型顏色大小原始碼
- iOS上架4.3相關問題修改建議iOS
- VS2015控制檯中獲取和修改當前字型大小(2-2)
- iOS 14 隱私政策修改,產品人如何應對?iOS
- CSS 字型新玩法之彩色字型CSS
- Vue富文字帶圖片修改圖片大小自定義選擇項自定義字型Vue自定義字型
- iOS Autolayout 修改約束優先順序崩潰問題iOS
- iOS 逆向 - 重籤應用除錯與程式碼修改 (Hook)iOS除錯Hook