iOS開發 帶xib的自定義View自適應螢幕問題
為了省時間,自定義的View,給它搞一個xib,裡面的子View,直接在xib裡劃拉幾個就行了,萬萬沒想到,整出來的自定義View,無論我
以何種姿勢的設定frame,載入別的地方,它的frame都是(0,0,600,600).網上搜了很久,也沒搜到類似問題,最後看到了一篇文章<XIB,AutoLayout使用心得>,
上面有段說的是
對於通過loadNamedXib載入到記憶體中的View,必須手動指定其frame中的width和height,然後再通過addSubView的方式新增到現有的View樹中,使用Xib表示的View在佈局時,是以600*600的預設寬高進行的。文章連結:http://blog.csdn.net/a345017062/article/details/45916833
瞬間頓悟,原來我loadNamedXib的時候沒有給frame賦值啊
上程式碼
#import <UIKit/UIKit.h> @interface XGView : UIView - (instancetype)initXGViewWithFrame:(CGRect)frame; @end #import "XGView.h" @implementation XGView - (instancetype)initXGViewWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil][0]; self.frame = frame; } return self; } @end
注:self.frame = frame;//這句程式碼必須有, 必須給View的frame賦值 這個是必須要的,切記!否則View的frame將始終是(0,0,600,600)!
ps:2015 12.25 修改: 以上載入帶XIB的View,在iOS7上會crash,以及在viewDidLoad載入時,會導致不能螢幕適配,只有在點選按鈕,建立新的View時候,才可用;具體原因,正在研究中...
2016 01.08 以上問題,已經解決,沒來得及更新解決方法,今天有時間說下:
其實很簡單,就是系統的- (instancetype)initWithFrame:(CGRect)frame 不要重寫,自定義方法就行了
你可以這樣:- (instancetype)initWithXXViewFrame:(CGRect)frame; 妥妥的,親測可用