iOS IB_DESIGNABLE 和 IBInspectable 用法簡介

SunnyD發表於2017-12-14

場景

在開發中,經常會遇到設定 UIView 或者 UIImageView 等控制元件圓角的情況,在 xib 和 storyboard 裡面,我們一般使用 Runtime Attributes 的方式,通過 layer.cornerRadiuslayer.masksToBounds 設定圓角半徑和邊緣裁剪。如下圖

Runtime Attributes

雖然執行起來能夠實現,但是我們並不能在 xib 馬上看到效果,要能實時在 Xcode 顯示介面效果,就需要用到 IB_DESIGNABLEIBInspectable 特性了。

用法

Xcode 6 開始,蘋果就提供了 IB_DESIGNABLEIBInspectable 特性,用法如下表

特性 用途 OC 使用 swift 使用
IB_DESIGNABLE 動態渲染該類圖形化介面 IB_DESIGNABLE 寫在 @interface @IBDesignable 寫在 class 前
IBInspectable 視覺化編輯該類的屬性 IBInspectable 寫在屬性型別前 @IBInspectable 寫在變數前

直接上程式碼。建立一個UIView子類,加上 IB_DESIGNABLE 特性

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface LCBaseView : UIView

@end
複製程式碼

這時候已經能在設計器直接看到效果了(不要忘了設定 CustomClass

IB_DESIGNABLE

然後再試試 IBInspectable,給 View 加一個 cornerRadius 屬性用來設定圓角半徑

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface LCBaseView : UIView

/** 圓角半徑 */
@property (nonatomic, assign) IBInspectable CGFloat cornerRadius;

@end
複製程式碼

然後在 .m 檔案中重寫 set 方法設定圓角

#import "LCBaseView.h"

@implementation LCBaseView

- (void)setCornerRadius:(CGFloat)cornerRadius {
    self.layer.cornerRadius = cornerRadius;
    self.layer.masksToBounds = YES;
}

@end
複製程式碼

回到設計器,會發現剛剛我們自定義的屬性神奇的出現在了皮膚上。把之前設定的 Runtime Attributes 屬性全部刪了,在這裡設定一個100,已經實現了我們想要的效果。

IBInspectable

相關文章