2014-11-24 69 views
0

我的觀點,你可以看到如下: view threeSETFRAME不起作用

當我試圖瓦解schedinaContViewCGSizeZero框架,它的工作原理只有在schedina的子視圖是空的。

這是我的代碼:

-(void)prepareFloatSchedina 
{ 
    schedinaVC = [[SchedinaViewController alloc] initWithNibName:@"SchedinaViewController" bundle:nil]; 
    schedinaVC.view.frame = self.schedina.frame; 
    [self.schedina addSubview: schedinaVC.view]; 

    schedinaExpandedSize = _schedinaContView.frame.size; 
    CGRect frame = [UIUtilCollection frameInSuperFrame:self.view.frame atCornerWithSize:schedinaCompressedSize]; 
    _schedinaContView.frame = frame; 

    NSLog(NSStringFromCGRect(_schedinaContView.frame)); 

    UIButton *bottone = [[UIButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 20.0, 20.0)]; 
    [bottone setTitle:@"Ciao" forState:UIControlStateNormal]; 
    [self.schedina addSubview:bottone]; 
} 

這就是NSLog的結果:

{{1004,748},{0,0}}

但_schedinaContView仍然存在於視圖中!

所以,如果我刪除UIButton,它完美的作品。這就是爲什麼?

解決:

我解決了設置爲YES [translatesAutoresizingMaskIntoConstraints:] 後來我停用NSLayoutConstraint的集中視圖方法的帕拉姆,我重新當我嘗試打開查看。

[_schedinaContView setTranslatesAutoresizingMaskIntoConstraints:YES]; 
_verticalSpace.active = NO; 

回答

2

我看到自動佈局約束。 setFrame不適用於自動佈局。 使用約束代替setFrame或關閉自動佈局。

+0

是的,我使用它。我也試過在setFrame後面使用[updateConstraints],但它不起作用。 – 2014-11-24 11:28:09

+0

@LucaD,如果你使用autolayout,你根本不需要'setFrame'。此外,最好將'translatesAutoresizingMaskIntoConstraints'設置爲'NO'以避免自動佈局衝突。 – 2014-11-24 11:36:56

+0

好吧,但閱讀有關AutoLayout的文檔,我讀了關於該方法的參數= YES。但是,我想我解決了,我會在下一個答案中解釋它 – 2014-11-24 11:45:24