UIView關(guān)聯(lián)Xib文件并可用AutoLayout
看了很多教程基本都是復(fù)制粘貼,未測(cè)試就發(fā)出來的趁俊,自己測(cè)試了一個(gè)可以用的寫出來
下面的內(nèi)容可以看可以不看,說說看到的幾個(gè)復(fù)制粘貼出來的文章糊探,導(dǎo)致的問題
- 通過
frame
的方式挎狸,添加子View
到self
上扣汪,無法實(shí)現(xiàn)當(dāng)前xib
內(nèi)部subView
對(duì)父視圖的自適應(yīng) - 通過將當(dāng)前
xib
里面的最外層view
,連接一個(gè)IBOutlet
的方式锨匆,也無法實(shí)現(xiàn)自適應(yīng)
運(yùn)行環(huán)境
- iOS7.0以上
開發(fā)環(huán)境
- Xcode7.2.1 (7.3是個(gè)大坑逼私痹,不信你試試自動(dòng)補(bǔ)全)
解決辦法
-
創(chuàng)建自定義View
File -> New -> File
選擇iOS分類下的Source下面的Cocoa Touch Class, 點(diǎn)擊Next
Class輸入自定義的View的類名例如
CustomView
, Subclass of 輸入 UIView, 此時(shí)下方的Also create XIB file是灰色的無法勾選 (其余的選項(xiàng)自己看吧), 點(diǎn)擊Next勾選下方的Targets 對(duì)應(yīng)到當(dāng)前項(xiàng)目(如果未勾選), Create
-
創(chuàng)建Xib文件
File -> New -> File
選擇iOS分類下的User Interface下面的View, 點(diǎn)擊Next
Save As中輸入Xib的名字,跟上面的類名一致, 后綴為xib, 例如
CustomView.xib
(后綴可以不輸入)勾選下方的Targets 對(duì)應(yīng)到當(dāng)前項(xiàng)目(如果未勾選), Create
關(guān)聯(lián)Xib和CustomView類
進(jìn)入CustomView.xib中, 點(diǎn)擊左側(cè)的 File's Owner
選擇右邊的 Custom Class
輸入 CustomView
- 自定義CustomView的初始化方法
CustomView.h
#import <UIKit/UIKit.h>
@interface CustomView : UIView
@end
CustomView.m
#import "CustomView.h"
@implementation CustomView
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super initWithCoder:aDecoder]) {
// 先添加View
UIView *view = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil].firstObject;
[self addSubview:view];
// 再添加約束
view.translatesAutoresizingMaskIntoConstraints = NO;
self.translatesAutoresizingMaskIntoConstraints = NO;
[self addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]];
}
return self;
}
添加完之后
- 進(jìn)入
Main.storyboard
中添加當(dāng)前自定義的CustomView
-
去自定義的Xib中添加幾個(gè)視圖,測(cè)試一波
上面5中如果在sb中改變上圖的CustomView的背景色紊遵,是不起作用的账千,因?yàn)樵贑ustomView.xib中被覆蓋成默認(rèn)的whiteColor了
- OK測(cè)試我們的運(yùn)行結(jié)果
Over 搞定 UIView
+ XIB
+ AutoLayout
如果寫的不對(duì)或者有問題的地方,歡迎大家在評(píng)論處指正暗膜,相互交流
最后附上自己寫的Demo MSBaseCustomView
Demo里面的MSBaseCustomView匀奏,可以直接被繼承使用