2011-06-21 28 views
2

我看到的代码看起来像这样有时会:CGRectZero和sizeToFit

NSArray *segmentedControl = [NSArray arrayWithObjects:@"First", @"Second", @"Third", nil]; 
    UISegmentedControl *ctrl = [[UISegmentedControl alloc] initWithItems:segmentedControl]; 
    ctrl.segmentedControlStyle = UISegmentedControlStyleBar; 
    ctrl.selectedSegmentIndex = 0; 
    ctrl.frame = CGRectZero; 
    [ctrl sizeToFit]; 
    self.navigationItem.titleView = ctrl; 
    [ctrl release]; 

对于CGRectZero和sizeToFit,这是为什么呢?事实上,你想要的对象在0,0原点,然后通过使框架的宽度和高度为0,但调用sizeToFit,它填满了视图?查看UIView文档,我不太确定“调整大小并移动接收器视图,以便它包含子视图”的含义。谢谢。

+0

sizeToFit也混淆了我。我主要用它来构建工具栏,我用它来确保我的工具栏是默认的高度,然后我手动设置原点和宽度 –

回答

2

在UIView sizeToFit调用sizeThatFits:与视图的当前大小。

sizeThatFits:默认实现返回该视图的当前值,换句话说,它在大多数情况下,几乎没有什么(UIView的一些子类覆盖此方法,以便返回更有用的东西,例如:的UILabel)

也就是sizeThatFits这是一个“模板方法”,这是一种扩展类功能的方法。它的主要目的是被覆盖。