gpt4 book ai didi

iphone - 给定字体的字符串长度以适应 UITextView

转载 作者:可可西里 更新时间:2023-11-01 03:50:22 26 4
gpt4 key购买 nike

我需要将用户在大型多行 UITextView 中输入的文本移动到较小(但仍然是多行)的 UITextView*。如果用户输入的文本多于较小 View 中显示的文本,我想截断文本以使其适合所有可见的(截断的)文本。 (大的 UITextView 和小的都不应该滚动。)

执行此操作的最佳方法是什么?

我可以使用循环,每次将字符串缩短一个字符,然后使用 NSStringsizeWithFont: constrainedToSize: lineBreakMode: 找出高度将需要较短的字符串,然后将其与我在较小的 UITextView 中可用的高度进行比较,在字符串适合时结束循环 - 但这看起来很慢而且很笨拙。一定有更好的方法。

我只想告诉目标 UITextView 在屏幕上显示时截断它的 displayText 成员,但我一直无法找到执行此操作的方法。

*有关此的更多上下文,来 self 在下面发表的评论:

我有一个横向应用程序。我根据用户选择的照片更改 View 的布局。如果是风景照片,标题会更小——只是照片底部的一行。如果她选择肖像照片,那么我可以在照片的侧面使用足够的空间来放置标题,所以标题更大。

如果用户将她的照片方向从纵向更改为横向,那么我想截断文本,然后允许她对其进行编辑以使其有意义。我可以直接删除它,但我更愿意保留它以尽量减少她的输入。

最佳答案

我编写了以下递归方法和公共(public) API 来正确执行此操作。丑陋的软糖因素是this question的主题.

#define kFudgeFactor 15.0
#define kMaxFieldHeight 9999.0

// recursive method called by the main API
-(NSString*) sizeStringToFit:(NSString*)aString min:(int)aMin max:(int)aMax
{
if ((aMax-aMin) <= 1)
{
NSString* subString = [aString substringToIndex:aMin];
return subString;
}

int mean = (aMin + aMax)/2;
NSString* subString = [aString substringToIndex:mean];

CGSize tallerSize = CGSizeMake(self.frame.size.width-kFudgeFactor,kMaxFieldHeight);
CGSize stringSize = [subString sizeWithFont:self.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];

if (stringSize.height <= self.frame.size.height)
return [self sizeStringToFit:aString min:mean max:aMax]; // too small
else
return [self sizeStringToFit:aString min:aMin max:mean];// too big
}

-(NSString*)sizeStringToFit:(NSString*)aString
{

CGSize tallerSize = CGSizeMake(self.frame.size.width-kFudgeFactor,kMaxFieldHeight);
CGSize stringSize = [aString sizeWithFont:self.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];

// if it fits, just return
if (stringSize.height < self.frame.size.height)
return aString;

// too big - call the recursive method to size it
NSString* smallerString = [self sizeStringToFit:aString min:0 max:[aString length]];
return smallerString;
}

关于iphone - 给定字体的字符串长度以适应 UITextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/851856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com