2014-11-24 60 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