UIButton 글꼴 크기를 너비에 맞게 조정
다음 코드가 있습니다.
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0.0, 0.0, 25, 25);
[[button layer] setCornerRadius:5.0f];
[[button layer] setMasksToBounds:YES];
[[button layer] setBackgroundColor:[[UIColor redColor] CGColor]];
[button.titleLabel setFrame:CGRectMake(0,0, 25, 25)];
[button setTitle:[NSString stringWithFormat:@"%@", [[topics objectAtIndex:indexPath.row] unread]] forState:UIControlStateNormal];
이 문제는 텍스트 내의 문자열이 길지 않은 경우 정상(1-2자리)으로 표시되는 것입니다.다만, 꽤 길면(3++자리) 안에 텍스트가 없는 빨간색 버튼 밖에 보이지 않습니다.이거 어떻게 조절해요?
난 그렇게 생각하지 않아:
[button.titleLabel setAdjustsFontSizeToFitWidth:YES];
일이 잘 되는 거죠?
이것을 시험해 보세요.
button.titleLabel?.numberOfLines = 1
button.titleLabel?.adjustsFontSizeToFitWidth = true
button.titleLabel?.lineBreakMode = .byClipping //<-- MAGIC LINE
이게 왜 효과가 있는지 모르겠지만 효과가 있습니다:)
button.titleLabel.adjustsFontSizeToFitWidth = YES;
자동 레이아웃을 사용하고 있으며 버튼 너비에 제한을 두고 있는 경우,는 스스로 작업을 수행해야 합니다.
다른 옵션(최소 축척률, 라인 수 등)은 필요에 따라 추가로 사용자 정의하는 데 사용할 수 있지만 필수는 아닙니다.
EliBud의 답변은 iOS 8에서 작동하지 않습니다. iOS 8에서 작동하는 솔루션을 찾았습니다. 아래는 빠른 코드입니다.
let label = self.button?.titleLabel
label?.minimumScaleFactor = 0.01
label?.adjustsFontSizeToFitWidth = true
label?.font = UIFont.systemFontOfSize(100)
라벨 가지고 놀 수 있어?lineBreakMode는 브레이크모드에 따라 결과가 다르다는 것을 알게 되었습니다.
Swift 4 확장
extension UIButton {
@IBInspectable var adjustFontSizeToWidth: Bool {
get {
return self.titleLabel?.adjustsFontSizeToFitWidth
}
set {
self.titleLabel?.numberOfLines = 1
self.titleLabel?.adjustsFontSizeToFitWidth = newValue;
self.titleLabel?.lineBreakMode = .byClipping;
self.titleLabel?.baselineAdjustment = .alignCenters
}
}
}
최근에 이것은 나에게 효과가 있는 것 같다
button.titleLabel!.numberOfLines = 1
button.titleLabel!.adjustsFontSizeToFitWidth = true
button.titleLabel!.lineBreakMode = NSLineBreakMode.ByClipping
iOS 10.3 솔루션은 다음과 같은 다른 답변을 기반으로 합니다.
button.titleLabel!.numberOfLines = 1
button.titleLabel!.adjustsFontSizeToFitWidth = true
button.titleLabel!.baselineAdjustment = .alignCenters
아무도 언급하지 않았다.baselineAdjustment
버튼 라벨이 세로 방향으로 어긋나기 때문에 필요했습니다.adjustsFontSizeToFitWidth
유효하게 됩니다.애플의baselineAdjustment
문서:
이 경우,
adjustsFontSizeToFitWidth
속성이 로 설정됩니다.true
이 속성은 글꼴 크기 조정이 필요한 경우 텍스트 기준선의 동작을 제어합니다.이 속성의 기본값은 다음과 같습니다.alignBaselines
이 속성은 다음 경우에만 유효합니다.numberOfLines
속성이 로 설정됩니다.1
.
WWIW, 라벨을 완벽하게 맞출 수 없었습니다.
adjustsFontSizeToFitWidth
Interface Builder에서 버튼의 너비 제한을 설정할 때까지 작동하지 않았습니다.
구속조건을 설정하면 버튼의 크기가 커지는 것을 방지하고 텍스트를 축소해야 한다는 것을 깨닫지 못했습니다.
Nik Kov의 답변에 근거합니다.
import UIKit
extension UIButton {
@IBInspectable var adjustFontSizeToWidth: Bool {
get {
return titleLabel!.adjustsFontSizeToFitWidth
}
set {
titleLabel!.adjustsFontSizeToFitWidth = newValue
titleLabel!.lineBreakMode = .byClipping
}
}
}
Swift 5가 탑재된 iOS 13.1에서는contentEdgeInsets
패딩 조절도 가능합니다.
extension UIButton {
@IBInspectable var adjustFontSizeToWidth: Bool {
get {
return self.titleLabel?.adjustsFontSizeToFitWidth ?? false
}
set {
self.titleLabel?.numberOfLines = 1
self.titleLabel?.adjustsFontSizeToFitWidth = newValue;
self.titleLabel?.lineBreakMode = .byClipping;
self.titleLabel?.baselineAdjustment = .alignCenters
self.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
}
}
}
다른 답변이 모두 도움이 되지 않으면 기본 스토리보드 스타일 값을 설정한 후adjustsFontSizeToFitWidth
작동해야 합니다.
자마린OS 솔루션
var accountButton = new UIButton();
accountButton.SetTitle("Account", UIControlState.Normal);
accountButton.TitleLabel.AdjustsFontSizeToFitWidth = true;
accountButton.TitleLabel.Lines = 1;
accountButton.TitleLabel.LineBreakMode = UILineBreakMode.Clip;
accountButton.TitleLabel.Font = accountButton.TitleLabel.Font.WithSize(35);
시스템이 크기를 조정하기 전에 글꼴 크기를 "크게" 설정했습니다.
이하의 솔루션이 유효했습니다.
button.titleLabel?.adjustsFontForContentSizeCategory = true
개발자 문서에서는 이 속성에 대해 다음과 같이 설명합니다.
장치의 콘텐츠 크기 범주가 변경될 때 개체가 자동으로 글꼴을 업데이트할지 여부를 나타내는 부울 값입니다.
언급URL : https://stackoverflow.com/questions/6178545/adjust-uibutton-font-size-to-width
'code' 카테고리의 다른 글
WPF 응용 프로그램에서 클래스 라이브러리에 XAML 컨트롤을 복사한 후의 문제 (0) | 2023.04.18 |
---|---|
Xcode 10.2.1 명령 PhaseScriptExecution이 0이 아닌 종료 코드로 실패했습니다. (0) | 2023.04.18 |
DataTable을 Excel로 내보내는 방법 (0) | 2023.04.18 |
함수 또는 커스텀 함수를 통해 Excel에서 regex 지원을 받으려면 어떻게 해야 합니까? (0) | 2023.04.18 |
Swift에서 첫 번째 ViewController에서 탐색 모음을 숨기려면 어떻게 해야 합니까? (0) | 2023.04.18 |