簡體   English   中英

UIButton占據了自己的尺寸Autolayout

[英]UIButton takes up its own size Autolayout

我試過的是: -

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的插入物。 幽靈的價值。

按鈕由多個子視圖組成。 按鈕的內部布局很可能在標簽和按鈕視圖本身之間有一些默認填充。

制作像您這樣的按鈕並檢查約束顯示以下內容:

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。 基本上這是按鈕的最小尺寸,沒有任何其他東西。

目前還不是很清楚你想要什么,或者為什么你會為此煩惱。 任何較小的東西都將是一個糟糕的觸摸目標,無論如何,沒有標簽或圖像的按鈕將是不可見的。 如果添加更長的標題,按鈕將變大。 如果添加其他約束以強制特定大小,則這些將覆蓋內在內容大小。

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

我想知道uibutton是否有最小的內在內容大小?

無論如何,試着做...

[button invalidateIntrinsicContentSize];

你試過[button sizeToFit];

對於自定義按鈕,我認為您需要覆蓋:

- (CGSize)sizeThatFits:(CGSize)size;

最后,如果沒有其他工作,你總是可以嘗試從文本大小給出按鈕寬度,如此

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

首先在故事板中定義按鈕大小的約束。

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

之后,你可以將它的大小設置為你想要的任何東西。

self.buttonSizeConst.constant = 65.0;

在此輸入圖像描述

編輯:使用此方法,您需要計算您的按鈕寬度,但我認為您不想這樣做。 您需要為其內容自動調整UIButton。 為此,您應該給出如下圖所示的約束。 當您更改標題時,它將擴展到右側。

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM