Ios UITextView内容大小与其frame.size相比毫无意义

Ios UITextView内容大小与其frame.size相比毫无意义,ios,objective-c,uitextview,Ios,Objective C,Uitextview,我正在尝试动态地将textView字体大小更改为更大/更小(没有成功…),以适应其框架。 即使我设置了一个大字体,并且明显有一半的文本看不见(太大/太小),textView.contentSize和textView.frame.size也是相等的 有什么想法吗 - (void)changeSizeForTextView:(UITextView*)textView { if (textView.contentSize.height > textView.frame.size.heig

我正在尝试动态地将textView字体大小更改为更大/更小(没有成功…),以适应其框架。 即使我设置了一个大字体,并且明显有一半的文本看不见(太大/太小),
textView.contentSize
textView.frame.size
也是相等的

有什么想法吗

- (void)changeSizeForTextView:(UITextView*)textView
{
    if (textView.contentSize.height > textView.frame.size.height) {
        int fontIncrement = 1;

        while (textView.contentSize.height > textView.frame.size.height) {
            textView.font = [UIFont fontWithName:kFontName size:MAX_FONT_SIZE - fontIncrement];
            fontIncrement++;
        }
    }
}

好的,根据我收集的一些代码,这里是答案:

  • 首先,必须在故事板中选中“可选”(稍后我会通过代码禁用它)
用法:

[textView dynamicFontSize];
UITextView+Dynamic.h

//
//  UITextView+Dynamic.h
//  MyFinder
//
//  Created by admin on 9/21/14.
//  Copyright (c) 2014 Webnet Ltd. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UITextView (Dynamic)
- (BOOL)dynamicFontSize;
-(BOOL)sizeFontToFit:(NSString*)aString minSize:(float)aMinFontSize maxSize:(float)aMaxFontSize;
@end
//
//UITextView+Dynamic.h
//MyFinder
//
//由管理员于2014年9月21日创建。
//版权所有(c)2014网络有限公司。保留所有权利。
//
#进口
@界面UITextView(动态)
-(BOOL)动态内容大小;
-(BOOL)sizeFontToFit:(NSString*)aString minSize:(float)aMinFontSize maxSize:(float)aMaxFontSize;
@结束
UITextView+Dynamic.m

//
//  UITextView+Dynamic.m
//  MyFinder
//
//  Created by admin on 9/21/14.
//  Copyright (c) 2014 Webnet Ltd. All rights reserved.
//

#import "UITextView+Dynamic.h"

#define kMaxFieldHeight 9999

static const CGFloat MAX_FONT_SIZE = 30.0;
static const CGFloat MIN_FONT_SIZE = 4.0;

@implementation UITextView (Dynamic)

- (BOOL)dynamicFontSize
{
    return [self sizeFontToFit:self.text minSize:MIN_FONT_SIZE maxSize:MAX_FONT_SIZE];
}

-(BOOL)sizeFontToFit:(NSString*)aString minSize:(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 = [aString boundingRectWithSize:tallerSize
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{NSFontAttributeName: self.font}
                                              context:nil].size;

    while (stringSize.height >= self.frame.size.height)
    {
        if (fontSize <= aMinFontSize) // it just won't fit
            return NO;

        fontSize -= 1.0;
        self.font = [self.font fontWithSize:fontSize];
        tallerSize = CGSizeMake(self.frame.size.width-fudgeFactor,kMaxFieldHeight);
        stringSize = [aString boundingRectWithSize:tallerSize
                                           options:NSStringDrawingUsesLineFragmentOrigin
                                        attributes:@{NSFontAttributeName: self.font}
                                           context:nil].size;
    }

    self.font = [self.font fontWithSize:self.font.pointSize - 1.0];
    return YES;
}

@end
//
//UITextView+Dynamic.m
//MyFinder
//
//由管理员于2014年9月21日创建。
//版权所有(c)2014网络有限公司。保留所有权利。
//
#导入“UITextView+Dynamic.h”
#定义KMAXFieldHight 9999
静态常量CGFloat最大字体大小=30.0;
静态常量CGFloat最小字体大小=4.0;
@实现UITextView(动态)
-(BOOL)动态内容大小
{
return[self-sizefontofit:self.text-minSize:MIN\u-FONT\u-SIZE maxSize:MAX\u-FONT\u-SIZE];
}
-(BOOL)sizeFontToFit:(NSString*)aString minSize:(float)aMinFontSize maxSize:(float)aMaxFontSize
{
浮动系数=16.0;
float fontSize=aMaxFontSize;
self.font=[self.font fontWithSize:fontSize];
CGSize-tallerise=CGSizeMake(self.frame.size.width-fudgeFactor,kMaxFieldHeight);
CGSize stringSize=[aString boundingRectWithSize:tallerSize
选项:NSStringDrawingUserLineFragmentOrigin
属性:@{NSFontAttributeName:self.font}
上下文:nil]。大小;
while(stringSize.height>=self.frame.size.height)
{

if(fontSize)在哪里调用此方法?另外,如何将
textView
添加到视图中(以编程方式与IB/Storyboard比较)通过情节提要,引用textView可以工作,但它不会进入if。同样,您在哪里调用此方法?
viewdiload
viewwillbeen
?通过子类UIView为了执行您编写的代码,需要在某处调用它。我不在乎代码存放在哪里。因为这不会覆盖系统me方法(如
init
viewdide出现
copyWithZone
)可以由操作系统自动调用的,您必须通过调用该方法以某种方式实际执行此代码。对该方法的调用在哪里?它是否在视图控制器的
视图中出现
?它是否在表视图的
cellforrowatinexpath
中?您在哪里调用此方法?