Programing

UIButton 글꼴 크기를 너비로 조정

lottogame 2020. 7. 22. 21:31
반응형

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 
        }
    }
}

enter image description here


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

반응형