다음 코드가 있습니다.
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
}
}
}