Ios7 iOS 7-UITextView大小字体,可将所有文本放入视图中(无滚动)

Ios7 iOS 7-UITextView大小字体,可将所有文本放入视图中(无滚动),ios7,resize,uitextview,sizewithfont,Ios7,Resize,Uitextview,Sizewithfont,我试图找到一种不推荐使用的方法来缩小文本视图的字体大小,这样所有文本都可以在文本视图中显示,而无需滚动 不推荐使用“sizeWithFont”方法,我希望确保最佳实践,XCode说使用“boundingRectWithSize”,但不确定如何使用它来缩小字体大小,以便所有文本都适合 有什么建议吗? 不,我不能用UILabel来代替。我需要让文本在顶部垂直对齐,UILabel不会这样做 这在iOS 7之前就起作用了: CGFloat fontSize; CGFloat minSize; if([d

我试图找到一种不推荐使用的方法来缩小文本视图的字体大小,这样所有文本都可以在文本视图中显示,而无需滚动

不推荐使用“sizeWithFont”方法,我希望确保最佳实践,XCode说使用“boundingRectWithSize”,但不确定如何使用它来缩小字体大小,以便所有文本都适合

有什么建议吗? 不,我不能用UILabel来代替。我需要让文本在顶部垂直对齐,UILabel不会这样做

这在iOS 7之前就起作用了:

CGFloat fontSize;
CGFloat minSize;
if([deviceType isEqualToString:@"iPad"] || [deviceType isEqualToString:@"iPad Simulator"]){
    fontSize = 40;
    minSize = 15;
}
else{
    fontSize = 18;
    minSize = 8;
}
while (fontSize > minSize)
{
    CGSize size = [quote sizeWithFont:[UIFont fontWithName:@"Interstate" size:fontSize] constrainedToSize:CGSizeMake(newView.frame.size.width, 10000)];

    if (size.height <= newView.frame.size.height) break;

    fontSize -= 1.0;
}
CGFloat-size;
CGFloat-minSize;
if([deviceType IseQualtString:@“iPad”]| |[deviceType IseQualtString:@“iPad模拟器”]){
fontSize=40;
minSize=15;
}
否则{
fontSize=18;
minSize=8;
}
同时(fontSize>minSize)
{
CGSize size=[quote sizeWithFont:[UIFont fontWithName:@“州际”大小:fontSize]约束大小:CGSizeMake(newView.frame.size.width,10000)];

如果(size.height尝试UITextView的
sizeThatFits
。您可能可以通过以下方式使用它:

//Set  text content of UITextView
//...

while (fontSize > minSize) {

   // Set font size of UITextView

   CGSize size = [textView sizeThatFits:(CGSizeMake(textView.frame.size.width, FLT_MAX)];

   if (size.height <= newView.frame.size.height) break;

   fontSize -= 1.0;

}
//设置UITextView的文本内容
//...
同时(fontSize>minSize){
//设置UITextView的字体大小
CGSize size=[textView sizeThatFits:(CGSizeMake(textView.frame.size.width,FLT_MAX)];
如果(尺寸。高度解决方案1
只需将
sizeWithFont:constrainedToSize:
替换为:

boundingRectWithSize:CGSizeMake(newView.frame.size.width, FLT_MAX)
                options:NSStringDrawingUsesLineFragmentOrigin
             attributes:@{NSFontAttributeName:[UIFont fontWithName:@"Interstate" size:fontSize]}
                context:nil];
解决方案2
sizehatfits
方法可用于解决以下问题:

while (fontSize > minSize &&  [newView sizeThatFits:(CGSizeMake(newView.frame.size.width, FLT_MAX))].height >= newView.frame.size.height ) {
    fontSize -= 1.0;
    newView.font = [tv.font fontWithSize:fontSize];
}

我希望这些解决方案之一能解决您的问题。干杯!

UITextView是UIScrollView->的子类,因此您可以在将文本或字体设置为textView后检查可滚动区域的内容大小

textView.text = quote;
do
{
    textView.font = [UIFont fontWithName:@"Interstate" size:fontSize];
    [textView layoutIfNeeded];
    if (textView.contentSize.height <= newView.frame.size.height) {
        break;
    }
    fontSize -= 1.0;
} while (fontSize >= minSize);
textView.text=quote;
做
{
textView.font=[UIFont fontWithName:@“州际”大小:fontSize];
[文本视图布局需要];
if(textView.contentSize.height=minSize);

这应该行得通……即使没有[textView LayoutIfNeed],它也可能行得通。

我必须做同样的事情,但是通过编程添加了自动布局约束(
NSLayoutConstraint
)。由于限制因素,
contentSize
在大多数情况下都不正确,导致
UITextView
滚动:/

非常简单,但就像所有的事情一样,你只需要想出它:)

斯威夫特5+

    var fontSize = Font.Size.section.rawValue
    let minSize = Font.Size.large.rawValue

    while fontSize > minSize {
        let textViewSize = CGSize(width: textView.frame.size.width, height: textView.frame.size.height)
        let size = textView.sizeThatFits(textViewSize)

        if size.height <= textViewSize.height {
            break
        }

        fontSize -= 1.0
    }

    textView.font = Font.primary.of(size: fontSize)
var fontSize=Font.Size.section.rawValue
让minSize=Font.Size.large.rawValue
而fontSize>minSize{
设textViewSize=CGSize(宽度:textView.frame.size.width,高度:textView.frame.size.height)
let size=textView.sizeThatFits(textViewSize)

如果size.height真棒!解决方案1对我不起作用,它实际上使字体变得非常大。但解决方案2起到了作用!谢谢!!那些不能在这里看到新视图的人-检查
bicycle
下面的答案我爱你,很好的解决方案:)这有些效果。对我来说,键入单个字符不太好。。。
    var fontSize = Font.Size.section.rawValue
    let minSize = Font.Size.large.rawValue

    while fontSize > minSize {
        let textViewSize = CGSize(width: textView.frame.size.width, height: textView.frame.size.height)
        let size = textView.sizeThatFits(textViewSize)

        if size.height <= textViewSize.height {
            break
        }

        fontSize -= 1.0
    }

    textView.font = Font.primary.of(size: fontSize)