2014-04-25 23 views
5

我試過是這樣的: -的UIButton佔用自己的大小自動佈局

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[self.view addSubview:btn]; 
btn.translatesAutoresizingMaskIntoConstraints = NO; 
[btn addTarget:self action:@selector(bringUpNextViewController:) 
        forControlEvents:UIControlEventTouchUpInside]; 
btn.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:14]; 
[btn setTitle:@"8" forState:UIControlStateNormal]; 
[self.view layoutIfNeeded]; 

NSLog(@"button size : %@", NSStringFromCGSize(btn.frame.size)); 

作爲輸出,我得到這個:

button size : {30, 29} 

然後我給setTitle字符串作爲一無所獲。按鈕寬度仍然是30.

那麼爲什麼總是這種情況?

我也試過給high compression resistance priorityhigh content hugging priority。不縮水到沒有。

問題在於,我想簡單地根據其內容減少按鈕的寬度,而不給出任何固定的寬度。

我可以採取文本的寬度,並給按鈕的寬度,但我不應該需要這樣做,如果按鈕佔用的內容寬度。

編輯:

它不是這是造成寬度插圖要麼是30。鬼的價值。

回答

6

A按鈕是由幾個子視圖。很可能按鈕的內部佈局在標籤和按鈕視圖本身之間有一些默認填充。

使你們這樣一個按鈕,檢查約束顯示以下內容:

button constraints (
"<NSContentSizeLayoutConstraint:0x8c40a60 H:[UIButton:0x8f29840(30)] Hug:250 CompressionResistance:750>", 
"<NSContentSizeLayoutConstraint:0x8c55280 V:[UIButton:0x8f29840(29)] Hug:250 CompressionResistance:750>" 
) 

30和29紮了你所看到的大小值。該按鈕的內在內容大小屬性也返回30,29。基本上這是按鈕的最小尺寸,在沒有其他的情況下。

這不是很清楚你想要什麼或爲什麼你被這個困擾。更小的將是一個不好的觸摸目標,無標籤或圖像的按鈕將無法看到。如果添加更長的標題,按鈕將變得更大。如果添加其他約束來強制特定尺寸,則這些將覆蓋內在內容尺寸。

如果您希望按鈕在沒有標題時變得不可見,那麼您應該明確地隱藏它。這會讓你在代碼中的意圖更加清晰,並且可以防止用戶意外擊中他們看不到的按鈕。

+0

啊,好吧,我的想法是正確的:-)很好的答案。 – Fogmeister

+0

嗯,好吧。聽起來現在好了。但正如我在問題中提到的那樣,「問題也是我想要簡單地根據其內容減少按鈕的寬度,而不給定任何固定寬度。」而對於默認內容大小,「30」似乎是一個點太大了,我只是不想讓按鈕出現。那會更好。 – esh

+0

@ BlackFlam3 Apple HIG指出按鈕的最小觸摸面積應爲44x44點大小。 30對於一個按鈕來說已經太小了,以至於無法輕鬆點擊。進一步縮小其規模並不合理。 – Fogmeister

0

您試過[button sizeToFit];

對於自定義按鈕,我認爲你需要重寫:

- (CGSize)sizeThatFits:(CGSize)size; 

最後,如果沒有其他的作品,你可以嘗試從文本大小給予按鈕的寬度,像這樣

CGSize textsize = [yourText sizeWithFont:[UIFont fontWithName:@"HelveticaNeue" size:14]]; 
[button setFrame:CGRectMake(0,0,textsize.width, textsize.height)]; 
+0

幾個百分點。 a)我使用'Autolayout'(無框架世界)。 b)'sizeWithFont'已棄用。需要爲此使用'boundingRectWithSize'(將來的證明)。 – esh

+0

最後,我使用了自動佈局的文本寬度。這只是蘋果相關的東西。 – esh

+0

好的。這些方法與自動佈局不太兼容,但如果我找到某些東西,我會盡快回復您。 – aksh1t

0

首先爲故事板中的按鈕尺寸定義一個約束。

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *buttonSizeConst; 

之後,你可以將它的大小設置爲這樣的任何你想要的。

self.buttonSizeConst.constant = 65.0; 

enter image description here

編輯:有了這個方法,你需要計算你的按鈕的寬度,但我覺得你並不想這樣做。你需要爲它的內容自動調整UIButton的大小。爲此,您應該給出如下圖所示的約束。當你改變你的標題時它會擴展到正確的位置。

enter image description here

+0

它的蘋果相關的東西。想知道「30」是從哪裏來的。我已經知道這個方法。 – esh

1

我想知道是否有一個uibutton的最小固有內容大小?

無論如何,嘗試做...

[button invalidateIntrinsicContentSize]; 
+1

社區wiki?你完成收集代表然後呢? – jrturton

+0

咦?哦...我一定是錯誤地勾選了它。大聲笑!當我回答時,在我的iPad上。 – Fogmeister

相關問題