Chr*_*ris 7 iphone uitextview ios
我在解决这个问题时遇到了麻烦.
正如标题所示,我在iPhone应用程序中的视图上有几个UITextView.我以编程方式创建它们并成功地用文本填充textview,但在某些情况下,我放在视图中的文本比我为其分配的帧占用更多空间.在这种情况下,我希望文本被截断,但我无法弄清楚如何做到这一点.
我预先定义了以下常量;
#define viewOriginX 20
#define viewOriginY 180
Run Code Online (Sandbox Code Playgroud)
这是我的UITextView创建代码;
textViewOne = [[UITextView alloc] initWithFrame:CGRectMake(viewOriginX, viewOriginY + 65, 280, 45];
textViewOne.delegate = self;
textViewOne.scrollEnabled = NO;
textViewOne.contentInset = UIEdgeInsetsZero;
textViewOne.font = viewFont;
textViewOne.textColor = [UIColor blackColor];
textViewOne.textAlignment = UITextAlignmentLeft;
[self.view addSubview:textViewOne];
Run Code Online (Sandbox Code Playgroud)
在某些情况下,我在这里有15到20行文本,我想将其截断为2行.
谁能帮助我朝正确的方向发展?
提前致谢!:d
fol*_*ben 41
可悲的是,UILabel有numberOfLines不会做,如果你需要的视图可编辑.或者你想要UITextView(本机)垂直对齐.
这是一个NSString从字符串中删除单词的类别,根据它在矩形中的大小:
@interface NSString (StringThatFits)
- (NSString *)stringByDeletingWordsFromStringToFit:(CGRect)rect
withInset:(CGFloat)inset
usingFont:(UIFont *)font
@end
@implementation NSString (StringThatFits)
- (NSString *)stringByDeletingWordsFromStringToFit:(CGRect)rect
withInset:(CGFloat)inset
usingFont:(UIFont *)font
{
NSString *result = [self copy];
CGSize maxSize = CGSizeMake(rect.size.width - (inset * 2), FLT_MAX);
CGSize size = [result sizeWithFont:font
constrainedToSize:maxSize
lineBreakMode:UILineBreakModeWordWrap];
NSRange range;
if (rect.size.height < size.height)
while (rect.size.height < size.height) {
range = [result rangeOfString:@" "
options:NSBackwardsSearch];
if (range.location != NSNotFound && range.location > 0 ) {
result = [result substringToIndex:range.location];
} else {
result = [result substringToIndex:result.length - 1];
}
size = [result sizeWithFont:font
constrainedToSize:maxSize
lineBreakMode:UILineBreakModeWordWrap];
}
return result;
}
@end
Run Code Online (Sandbox Code Playgroud)
对于a UITextView,使用插值8来说明UIKit绘制它们的方式:
CGRect rect = aTextView.frame;
NSString *truncatedString = [theString stringByDeletingWordsFromStringToFit:rect
withInset:8.f
usingFont:theTextView.font];
Run Code Online (Sandbox Code Playgroud)
现在UITextView在内部使用TextKit,它更容易.
而不是截断实际的字符串,将text(或attributedText)属性设置为整个字符串并截断容器中显示的文本量(就像我们一样UILabel):
self.textView.scrollEnabled = NO;
self.textView.textContainer.maximumNumberOfLines = 0;
self.textView.textContainer.lineBreakMode = NSLineBreakByTruncatingTail;
Run Code Online (Sandbox Code Playgroud)
您可以进行字符计数。例如,如果您有这样的 UITextField:
+--------------------+
|This is a string in |
|a text view. |
+--------------------+
Run Code Online (Sandbox Code Playgroud)
每行大约有 20 个字符。如果您知道该数字,您可以简单地通过方法截断字符串-substringToIndex:。
int maxCharacters = 40; // change it to your max
if([myString length] > maxCharacters) {
myString = [myString substringToIndex:maxCharacters];
}
Run Code Online (Sandbox Code Playgroud)
你也可以考虑一下UILabel。由于您只需要 2 行文本,UILabel 的numberOfLines属性可以解决您的问题。
| 归档时间: |
|
| 查看次数: |
14029 次 |
| 最近记录: |