我想根據文本字段的高度更改我的文本字段的字體大小。動態更改NSTextfield的字體大小
因爲我有代碼根據屏幕大小(屏幕分辨率)和我放入最低分辨率時調整了我的界面。
該文本是有點削減,這使得它不可讀。
如何動態更改字體大小。文本字段具有固定的高度和寬度。
我是一個OSX的應用程序,所以我不能使用的字體大小調整像iOS的
我想根據文本字段的高度更改我的文本字段的字體大小。動態更改NSTextfield的字體大小
因爲我有代碼根據屏幕大小(屏幕分辨率)和我放入最低分辨率時調整了我的界面。
該文本是有點削減,這使得它不可讀。
如何動態更改字體大小。文本字段具有固定的高度和寬度。
我是一個OSX的應用程序,所以我不能使用的字體大小調整像iOS的
最近,我不得不創建一個方法來這個自己,這裏是這段代碼我想出了
-(float)updateFontSize : (UITextField *)textField : (int)targetLabelWidth : (int)targetLabelHeight
{
//Current Label Size
CGSize size = [textField.text sizeWithFont:textField.font];
//Size label should be limited to
CGSize targetSize = CGSizeMake(targetLabelWidth , targetLabelHeight);
//Current FontSize
int fontSize = textField.font.pointSize;
if(size.height > targetSize.height)
{
while(size.height > targetSize.height)
{
//Create new font
UIFont *newFont = textField.font;
//Decrement font size
fontSize-=1;
//Set new font size
newFont = [newFont fontWithSize:fontSize];
//set new label size
size = [textField.text sizeWithFont:newFont];
}
}
if(size.height < targetSize.height)
{
while(size.height < targetSize.height)
{
//Create new font
UIFont *newFont = textField.font;
//Increment font size
fontSize+=1;
//Set new font size
newFont = [newFont fontWithSize:fontSize];
//set new label size
size = [textField.text sizeWithFont:newFont];
}
}
//Prevent fontsize ever being 0
if(fontSize == 0)
{
fontSize = 1;
}
return fontSize;
}
我做了一個快速課程來測試它。你可以玩高度,它會相應地改變它的大小。
int height = 10;
UITextField *field = [[UITextField alloc] initWithFrame:CGRectMake(10, 50, 200, height)];
field.borderStyle = UITextBorderStyleRoundedRect;
field.textAlignment = NSTextAlignmentLeft;
field.text = @"testing";
float size = [self updateFontSize:field :200 :height];
field.font = [UIFont fontWithName:@"Arial" size:size];
[self.view addSubview:field];
編輯:更新
當我創造了這個代碼,設置標籤的寬度和高度,所以我可以調整標籤,以便它可以在一個容器內適應它,當這個最初創建。我很快重新適應TextField,但它應該工作正常
在我可以調整它之前,我必須找出文本字段中包含的文本的當前寬度/高度。現在,在我的方法,我知道的寬度和高度應該是什麼,但是你想這樣
的方法所以我們有一個新的方法
-(float)getFontSizeToFit:(NSTextField*)aTextField theMultilineTextToFitIn:(NSString*)aString
{
}
確定可以去與此有關。注意我不是在Mac上,所以我這樣做短手
所以,你必須像這樣
一些文字文本框「你好,這是一些隨機文本」
所以你打電話
CGSize size = [textField.text sizeWithFont:textField.font];
這之前,做任何換行符或類似的東西
因此,可以說創建一個大小對象包含寬度和文本的高度都文本的寬度和高度是W = 200,H = 30,並且可以說textField只有寬度150,高度50,我們需要在這裏適合文本。因此,我們有
Width = 200
Height = 30
textFieldWidth = 150
textFieldHeight = 50
我可以簡單地做
NumberOfLines = Width /textFieldWidth .
如果這個值是< 1,那麼我知道該文本將適合文本字段內,但是如果它大於1,那麼我知道它不適合textField,因此需要調整大小。在上面的例子中,它將是200/150 = 1.333。我總是把這個值加起來,所以我將它舍入爲2.所以我知道我需要至少2行以便將這個標籤放在容器中。我所知道的標籤,該標籤在上面的例子中是30的高度,所以我做
身高* NumberOfLines = NumberOfLinesNeeded 30 * 2 = 60
但是如果你看看上面的文本框的高度只有50.這意味着對象需要調整大小。所以讓我們通過與變量的方法上面運行
CGSize size = [textField.text sizeWithFont:textField.font];
這將創建尺寸對象(200,30)
然而,文本字段本身只是(150,60)
現在,我們可以將文字樣式換成單詞換行,所以文本會被分成2行,但問題是文本的高度會比textField的高度大。因此,我們需要開始縮小字體大小,直到兩行文本的合併長度小於60.
這就是while循環進來的地方。從這裏您可以使用while循環來持續減少字體大小除以文本1,然後執行上述計算,並繼續操作,直到文本適合文本字段本身。
正如我之前提到的,我不在Mac上,所以我無法爲您創建此方法。但希望使用我描述的上述邏輯,你應該能夠自己創建類似的東西。
祝你好運,希望這有助於!
我很抱歉,但我不明白這段代碼。首先,該方法的聲明似乎不正確(或者它是寫出聲明的具體方式?)。我不明白currentLabelWidth和currentLabelHeight是什麼。標籤的寬度和高度?如果我理解這個問題,我們想要根據texfield的寬度和高度調整字體大小。該方法的參數應該只是NSTextField和我們想要適合NSTextField的字符串的NSString?如果你能澄清,我將不勝感激。 –
我更新了那裏的方法,爲了清晰起見,重命名了變量。基本上你傳入了你想要文本字段大小的targetWidth和targetHeight。一個Size對象由這兩個變量創建。大小對象也是根據您要更新的TextField對象的當前文本大小創建的。然後它嘗試更新文本字段的大小,這就是while循環所做的。回顧這一點,我意識到用戶指定的目標是不是iphone,我不適合閱讀不好。然而,更新代碼非常簡單,可悲的是我不在mac atm – AdamM
感謝您的回答,但我如何獲得目標寬度和高度?當我在NSTextfield中設置文本時,我不知道我會得到多少行。我認爲你應該改變你的方法的名稱 - (float)getFontSizeToFit:(NSTextField *)aTextField theMultilineTextToFitIn:(NSString *)aString如果你設法做到這一點,它會很清楚,你會問我所有的SO朋友投票支持你的答案:) –
你說「我想改變我的文本字段的字體大小,這取決於我的文本字段的高度。」你也可以說「文本框有固定的高度和寬度。」你想做的事情不清楚。 –
我認爲OP意味着會有幾個不同的文本字段,並且每個文本字段都會有不同的固定寬度/高度,因此需要爲每個文本字段相應地調整文本大小。我提供的答案應該動態調整字體大小,希望有所幫助! – AdamM