2013-01-14 147 views
2

我想通過xib文件添加一個視圖到UIScrollview。添加從xib加載的視圖到UIScrollview

觀看起來像這樣: View setup in Interface Builder

我得到的是: The View added to a UIScrollview in code

代碼中,我用它來添加查看到的UIScrollView(這是建立在故事板)是:

初始化代碼:

NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"SpuelungProtokollView" owner:self options:nil]; 
HPSpuelungProtokollView * spuelungProtokollView = [subviewArray objectAtIndex:0]; 
HPSpuelung * vInfo = pInfo; 

// setup Infos 
// ... this part is not related to the problem ... 

[self setContentView:spuelungProtokollView]; 

然後我做了以下克viewDidLoad:

[[self scrollView] setContentSize:[[self contentView] frame].size]; 
[[self scrollView] addSubview:[self contentView]]; 
[[self contentView] layoutIfNeeded]; 

有沒有人有類似的問題 - 知道如何將一個(適當約束)的UIView正確添加到的UIScrollView?

在此先感謝您的提問!

編輯

一個奇怪的副作用是:查看加載正確,如果我把Hirarchy創建視圖viewDidAppear:

+0

什麼你的awakeFromNib看起來像嗎? – Bejmax

+0

我沒有任何 - 這個功能有什麼好處?對不起,與xib的蜜蜂到現在爲止,我做了所有的故事板,我從來沒有使用這種方法 – sensslen

+0

我添加了一個答案,在蘋果開發網站上的協議閱讀,他們也有例子。祝你好運! – Bejmax

回答

1

我已經能夠解決這個問題 - 我必須設置自定義視圖的面罩自動調整大小在initWithCoder:這樣的:

- (id) initWithCoder:(NSCoder *)aDecoder { 
    if (self = [super initWithCoder:aDecoder]) { 
     [self setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; 
    } 

    return self; 
} 

希望這有助於別人....

1

你應該實現awakeFromNib:初始化視圖。如果你不是,那麼它可能沒有正確設置。

NSNibAwaking協議參考:這種非正式協議由一個單一 方法,awakeFromNib的。在從Interface Builder歸檔文件(nib文件)中加載對象後,類可以實現此方法,以 初始化狀態信息。

所以,我想你想要的東西像你IMPL如下:

- (void)awakeFromNib { 
    [[self scrollView] setContentSize:[[self contentView] frame].size]; 
    [[self scrollView] addSubview:[self contentView]]; 
    [[self contentView] layoutIfNeeded]; 
    return; 
} 

awakeFromNib實際上是特殊的,因爲它是在NSNibAwaking的一部分非正式協議(基本上意味着,你的對象不必符合它)。當一個對象從一個nib文件(.xib)中加載時,會發生什麼情況,只要它實現了awakeFromNib方法,它將在所有插座連接後發送此消息。

+0

由於我在'prepareForSegue:sender:'中創建視圖,我怎麼知道哪個函數首先被調用,'viewDidLoad:' - 它確保ScrollView存在 - 和'awakeFromNib:' - 這確保了Nib被正確加載? – sensslen

+0

看看[這個答案](http://stackoverflow.com/a/6303539/1354100)這個問題。 ;)基本上viewDidLoad被首先調用。 – Bejmax

+0

不幸的是,根據我的測試,這不是真的 - 我猜這是因爲調用Methodes來指示不同視圖的狀態 - viewDidLoad在故事板xib解壓縮時調用,awakeFromNib在容器視圖準備就緒時調用... – sensslen