2010-07-28 78 views
13

我有一些代碼使用滑塊創建表格單元格。這非常簡單,它在iPhone上的尺寸很大。我有點匿名在這裏它:自動調整UITableViewCell內容寬度的大小

UITableViewCell* cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Foo"] autorelease]; 
cell.selectionStyle = UITableViewCellSelectionStyleNone; 
CGRect contentViewFrame = cell.contentView.frame; 
CGRect sliderFrame = CGRectMake(10, 0, 280, contentViewFrame.size.height); 
UISlider* slider = [[UISlider alloc] initWithFrame:sliderFrame]; 
UIImage* minimumImage = [UIImage imageNamed:@"min.png"]; 
UIImage* maximumImage = [UIImage imageNamed:@"max.png"]; 
slider.minimumValueImage = minimumImage; 
slider.maximumValueImage = maximumImage; 
slider.value = 0.5f; 
[slider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged]; 
[cell.contentView addSubview:slider]; 
[slider release]; 

當然,這是不正確尺寸的iPad。所以我的第一個想法是將autoresizingMask屬性設置爲UIViewAutoresizingFlexibleWidth。問題解決了,對吧?不。現在在iPhone上,滑蓋加圖像內容的寬度小於280,因此它不會直接結束 - 它最終會縮短大約20個像素。

在iPad上,同樣的事情 - UISlider的寬度會自動縮小到距離單元末端約20個像素。

也許自動調整大小標誌是關注細胞不存在的accessoryView?我試圖明確地將其設置爲nil,但我認爲它默認爲nil,所以沒有任何更改。

我希望這個單元格的內容自動調整爲單元格的「完整」寬度,而不管設備和方向如何。是否有捷徑可尋?

回答

3

您應該能夠告訴調整大小系統將對象從右邊緣「固定」一個固定的距離(如果它沒有調整足夠大的距離)。如果您嘗試使用IB,您可以創建一個寬度調整視圖並固定在右側。

您是否還有UIViewAutoresizingFlexibleRightMargin集?

+0

我沒有'UIViewAutoresizingFlexibleRightMargin'集合。你能解釋一下如何以編程方式做這件事嗎?上面張貼的代碼是匿名的,但正是我現在所擁有的。 – 2010-07-29 06:56:18

10

它的工作原理與您所描述的完全相同。我傾向於認爲它是iOS的錯誤。在iPAD上創建新的UITableViewCell,其寬度設置爲320.硬編碼(!)視圖和contentView。如果設置爲UIViewAutoresizingFlexibleWidth,它不會正確調整大小。我把它設置爲view.frame.size.width/2,結果有趣:在iPhone上它是160,在iPad上它是608!

我最終手動調整了我的單元格及其內容。

+1

是的,看起來它總是在第一次創建時是320. – onmyway133 2014-03-20 07:58:09

+0

這不是一個bug,'contentMode'只是錯誤的。見下文。 – 2015-01-30 16:06:40

6

位遲了,但我今天發現了同樣問題的解決方案,但是您需要創建一個自定義的UITableViewCell。 則可以覆蓋功能

- (void) layoutSubviews 
{ 
    [dateLabel setFrame:CGRectMake(10.f, 16.f, 80.f, 12.f)]; 
    [textLabel setFrame:CGRectMake(106.f, 16.f, contentView.frame.size.width-105.f + 1.f, 12.f)]; 
} 

在該功能的self.frame.size.width是實際的。
它也適用於設備的旋轉。

+0

您不需要手動設置這些子視圖幀。你只需要在那裏調用'[super layoutSubviews]'',這將使子視圖正確地自動調整大小。 – Hlung 2012-06-21 11:15:49

+1

你這樣做,如果你有自定義子視圖(在你的自定義單元格中) – 2012-08-11 01:02:12

+1

layoutSubviews,文檔狀態「你不應該直接調用這個方法。」相反,調用setNeedsLayout – 2012-12-07 12:01:18

3

將您的手機的contentMode設置爲UIViewContentModeRedraw

+0

爲我做了詭計 – Jasper 2014-02-06 09:33:51

相關問題