[ios] 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;

Auto-Layout을 사용 하고 버튼의 너비에 제약을 설정 한 경우 자체적으로 작업을 수행해야합니다 .

다른 옵션 (최소 축척 비율, 줄 수 등)은 여전히 ​​필요에 따라 추가로 사용자 정의하는 데 사용할 수 있지만 필수는 아닙니다.


답변

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


답변

여기에 다른 답변을 기반으로 한 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, 저는 라벨을 완벽하게 정렬 할 수 없었습니다.


답변

adjustsFontSizeToFitWidth Interface Builder에서 내 버튼에 너비 제약 조건을 설정할 때까지 작동하지 않았습니다.

제약 조건을 설정하면 버튼의 크기가 커지지 않아 텍스트를 축소해야한다는 사실을 깨닫지 못했습니다.


답변

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

여기에 이미지 설명 입력