2011-06-21 31 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這是一個「模板方法」,這是一種擴展類功能的方法。它的主要目的是被覆蓋。