Ios UITextView内容大小与其frame.size相比毫无意义
我正在尝试动态地将textView字体大小更改为更大/更小(没有成功…),以适应其框架。 即使我设置了一个大字体,并且明显有一半的文本看不见(太大/太小),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.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
中?您在哪里调用此方法?