如果文本太多,有沒有辦法在UITextView中縮小字體大小?類似於UILabel?在UITextView中調整字體大小
5
A
回答
7
試試這個:
NSInteger lengthThreshold = 200;
if([ textView.text length ] > lengthThreshold) {
NSInteger newSize = ... //calculate new size based on length
[ textView setFont: [ UIFont systemFontOfSize: newSize ]];
}
11
與接受答案的問題是,你必須猜測人物的需要來填充字段中的數字(字符串的長度),並從字體的不同而不同字體。像這樣的東西,UITextView上的一個類別,應該可以工作。
#import "UITextView+Size.h"
#define kMaxFieldHeight 1000
@implementation UITextView (Size)
-(BOOL)sizeFontToFitMinSize:(float)aMinFontSize maxSize:(float)aMaxFontSize {
float fudgeFactor = 16.0;
float fontSize = aMaxFontSize;
self.font = [self.font fontWithSize:fontSize];
CGSize tallerSize = CGSizeMake(self.frame.size.width-fudgeFactor,kMaxFieldHeight);
CGSize stringSize = [self.text sizeWithFont:self.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];
while (stringSize.height >= self.frame.size.height) {
if (fontSize <= aMinFontSize) // it just won't fit, ever
return NO;
fontSize -= 1.0;
self.font = [self.font fontWithSize:fontSize];
tallerSize = CGSizeMake(self.frame.size.width-fudgeFactor,kMaxFieldHeight);
stringSize = [self.text sizeWithFont:self.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];
}
return YES;
}
@end
0
Swift 4實現靈感來自@Jane Sales的回答。
計算可用寬度和高度時,我們還必須考慮可能的垂直和水平邊距(textContainerInset
和textContainer.lineFragmentPadding
)。
這裏有UITextView
利潤率如何工作的一個更好的解釋:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/TextUILayer/Tasks/SetTextMargins.html
如果文本視圖可以調整,那麼我們也必須強制佈局,所以我們可以計算基於最大可能的文本視圖大小的字體大小。在這種情況下,只考慮高度(僅當需要的文字高度大於原始可用高度時才佈置)。
import UIKit
extension UITextView {
func adjustFontToFitText(minimumScale: CGFloat) {
guard let font = font else {
return
}
let scale = max(0.0, min(1.0, minimumScale))
let minimumFontSize = font.pointSize * scale
adjustFontToFitText(minimumFontSize: minimumFontSize)
}
func adjustFontToFitText(minimumFontSize: CGFloat) {
guard let font = font, minimumFontSize > 0.0 else {
return
}
let minimumSize = floor(minimumFontSize)
var fontSize = font.pointSize
let availableWidth = bounds.width - (textContainerInset.left + textContainerInset.right) - (2 * textContainer.lineFragmentPadding)
var availableHeight = bounds.height - (textContainerInset.top + textContainerInset.bottom)
let boundingSize = CGSize(width: availableWidth, height: CGFloat.greatestFiniteMagnitude)
var height = text.boundingRect(with: boundingSize, options: .usesLineFragmentOrigin, attributes: [.font: font], context: nil).height
if height > availableHeight {
// If text view can vertically resize than we want to get the maximum possible height
sizeToFit()
layoutIfNeeded()
availableHeight = bounds.height - (textContainerInset.top + textContainerInset.bottom)
}
while height >= availableHeight {
guard fontSize > minimumSize else {
break
}
fontSize -= 1.0
let newFont = font.withSize(fontSize)
height = text.boundingRect(with: boundingSize, options: .usesLineFragmentOrigin, attributes: [.font: newFont], context: nil).height
}
self.font = font.withSize(fontSize)
}
}
相關問題
- 1. 無法調整大小UITextView
- 2. 如何獲得UILabel(UITextView)自動調整字體大小?
- 3. 字體調整大小HTML
- 4. 調整字體大小 - 字體屬性
- 5. 使用JQuery調整窗口大小調整CSS字體大小
- 6. 調整div大小時調整字體大小
- 7. UITextView不針對iPhone調整大小
- 8. 調整大小UITextView的橫向打印
- 9. 基於UITextView幀大小調整文本
- 10. 如何自動調整UITextView的大小?
- 11. 自動調整UITextView的大小
- 12. 文字字體調整大小
- 13. 如何在FormLayoutPanel中調整窗體的大小時調整窗體的大小?
- 14. 媒體查詢字體大小未調整大小
- 15. 根據窗體調整大小和調整窗體控件調整大小
- 16. 調整大小在textarea的字體不增加textarea的大小
- 17. 字體大小在文本較長時不會調整大小
- 18. 字體真棒不會調整大小
- 19. 調整特殊字體的大小
- 20. 調整Android WebView的字體大小
- 21. 如何調整字體大小
- 22. 自動調整UILabel字體大小
- 23. 自動調整字體大小
- 24. 將EditText調整爲字體大小
- 25. 動態調整字體大小
- 26. 調整文本框的字體大小
- 27. LibGDX調整窗口字體大小圖
- 28. CKEditor初始調整 - 字體大小
- 29. android設置:調整字體大小
- 30. UISlider更改UITextView的字體大小
我非常喜歡這種方法。如果任何人有使用它的問題,這是我做的:'if [![mainContent sizeFontToFitMinSize:12.0 maxSize:20.0]){NSLog(@「content does not fit!」); }' – dchakarov 2012-03-16 13:16:15