2011-03-30 61 views
0

UITableView有自定義標題UIView,其中包含UILabel。由於表格的右側也有段索引,我想將標籤居中放置在剩餘空間中。如何旋轉viewForHeaderInSection

enter image description here

問題是如何爲「中心」的標籤,同樣,當設備旋轉到的風景線!我已經嘗試了Interface Builder和僅限代碼,並且總是有錯誤。

限制:

  1. 標籤是儘可能地窄
  2. 標籤不能被調整大小
  3. 標籤必須表寬度減去區段索引

一個簡單的內部總是居中方法來解決這個問題將使節標題視圖從tableView右側分離。試圖做到這一點,失敗了。下面是從viewForHeaderInSection一些代碼:

CGRect frame = CGRectMake(0, 0, tableView.bounds.size.width - 32, 50.0f); 
// MAGIC 32 for SectionIndexTitles 

UIView *view = [[[UIView alloc] initWithFrame:frame] autorelease]; 

UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero]; 
label.font = [UIFont fontWithName:@"Courier" size:20]; 
label.text = @"Section title long"; 
label.textAlignment = UITextAlignmentCenter; 
label.backgroundColor = [UIColor redColor]; 

CGSize labelSize = [label.text sizeWithFont:label.font 
          constrainedToSize:frame.size 
           lineBreakMode:UILineBreakModeClip]; 
label.frame = CGRectMake(0, 0, labelSize.width, labelSize.height); 
label.center = CGPointMake(frame.size.width/2.0f, kHeaderHeight/2.0f); 

label.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; 

任何想法表示歡迎!甚至無法回想有多少種不同的方式,我失敗了:)

回答

0

嘿,設置如下在IB: 禁用所有自動調整功能(沒有靈活的寬度,高度,或任何左,底部,頂部,右) 。

應該做的工作:)

要支持魔術32個像素,嘗試,因爲你需要它來定位標籤。 這意味着: 將它放在你的UIView的中心並將其向左移動16個像素,現在不要以編程方式改變框架,否則「精彩」自動定位將被操縱,我們並不真正想要:)

+0

不,相對位置保持不變,但在整個UIView內。我需要UIView中的MINUS 32爲節索引保留的魔法像素... – JOM 2011-03-30 13:34:46

+0

標籤寬度是動態的,我不知道它是什麼。因此,必須在代碼中調整標籤框以最大限度地減少它... – JOM 2011-03-30 14:02:19

+0

一方面,您寫的「標籤不得調整大小」,另一方面,寬度是靈活的:/您是否設置了柔性寬度 - 「箭頭」在界面生成器中?否則寫在你的代碼:'label.autoresizingMask = UIViewAutoresizingMaskFlexibleWidth'不靈活的左或右 – Lepidopteron 2011-03-30 14:06:52