1. 程式人生 > >iOS開發 帶xib的自定義View自適應螢幕問題

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; 妥妥的,親測可用