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 = YES;
button.titleLabel.lineBreakMode = NSLineBreakByClipping; //<-- 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)
label? .lineBreakMode로 게임을 할 수 있습니다. 결과는 브레이크 모드마다 다릅니다.
최신 스위프트에서 이것은 나를 위해 작동하는 것 같습니다
button.titleLabel!.numberOfLines = 1
button.titleLabel!.adjustsFontSizeToFitWidth = true
button.titleLabel!.lineBreakMode = NSLineBreakMode.ByClipping
adjustsFontSizeToFitWidth
Interface Builder의 버튼에 너비 제한을 설정하기 전까지는 작동하지 않았습니다.
제약 조건을 설정하면 버튼의 크기가 커지지 않아 텍스트를 축소해야한다는 것을 알지 못했습니다.
다른 답변을 기반으로 한 iOS 10.3 솔루션은 다음과 같습니다.
button.titleLabel!.numberOfLines = 1
button.titleLabel!.adjustsFontSizeToFitWidth = true
button.titleLabel!.baselineAdjustment = .alignCenters
baselineAdjustment
아직 아무도 언급 하지 않았습니다. 버튼 레이블이 수직으로 정렬되지 않아서 필요했습니다 adjustsFontSizeToFitWidth
. Apple의 baselineAdjustment
설명서 :
이
adjustsFontSizeToFitWidth
속성이로 설정된true
경우이 속성은 글꼴 크기를 조정해야하는 상황에서 텍스트 기준선의 동작을 제어합니다. 이 속성의 기본값은alignBaselines
입니다. 이 속성은numberOfLines
속성이로 설정된 경우에만 유효 합니다1
.
FWIW, 나는 레이블을 완벽하게 맞출 수 없었습니다.
스위프트 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
}
}
}
Xamarin.iOS 솔루션
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);
시스템이 크기를 맞추기 전에 글꼴이 "큰"글꼴이되도록 글꼴 크기를 설정했습니다.
Nik Kov의 답변을 바탕으로 :
import UIKit
extension UIButton {
@IBInspectable var adjustFontSizeToWidth: Bool {
get {
return titleLabel!.adjustsFontSizeToFitWidth
}
set {
titleLabel!.adjustsFontSizeToFitWidth = newValue
titleLabel!.lineBreakMode = .byClipping
}
}
}
아래 솔루션이 나를 위해 일했습니다.
button.titleLabel?.adjustsFontForContentSizeCategory = true
개발자 설명서는이 속성을 다음과 같이 설명합니다.
장치의 내용 크기 범주가 변경 될 때 객체가 자동으로 글꼴을 업데이트하는지 여부를 나타내는 부울 값입니다.
참고URL : https://stackoverflow.com/questions/6178545/adjust-uibutton-font-size-to-width
'Programing' 카테고리의 다른 글
Ubuntu 14.04 LTS (Trusty Tahr)에서 ia32-libs를 설치하는 방법 (0) | 2020.07.22 |
---|---|
JSON에서 RestTemplate을 통한 POST 요청 (0) | 2020.07.22 |
StringFormat을 사용하여 WPF XAML 바인딩에 문자열을 추가하십시오. (0) | 2020.07.22 |
Angular에서는 배열에서 객체를 검색해야합니다. (0) | 2020.07.22 |
쉘 스크립트에서 대소 문자를 구분하지 않는 문자열 비교 (0) | 2020.07.22 |