【发布时间】:2014-03-20 07:47:39
【问题描述】:
我有一个不可滚动的 UITextView,它的 layoutManager maximumNumberOfLines 设置为 9,效果很好,但是,我似乎无法在 NSLayoutManager 中找到一种方法来限制文本不超出 UITextView 的框架。
以这个截图为例,光标在第 9 行(第 1 行被截断在截图的顶部,所以忽略它)。如果用户继续键入新字符、空格或按回车键,光标将继续离开屏幕,UITextView 的字符串继续变长。
我不想限制 UITextView 的字符数量,因为外来字符的大小不同。
我已经尝试解决这个问题好几个星期了;非常感谢任何帮助。
CustomTextView.h
#import <UIKit/UIKit.h>
@interface CustomTextView : UITextView <NSLayoutManagerDelegate>
@end
CustomTextView.m
#import "CustomTextView.h"
@implementation CustomTextView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
self.backgroundColor = [UIColor clearColor];
self.font = [UIFont systemFontOfSize:21.0];
self.dataDetectorTypes = UIDataDetectorTypeAll;
self.layoutManager.delegate = self;
self.tintColor = [UIColor companyBlue];
[self setLinkTextAttributes:@{NSForegroundColorAttributeName:[UIColor companyBlue]}];
self.scrollEnabled = NO;
self.textContainerInset = UIEdgeInsetsMake(8.5, 0, 0, 0);
self.textContainer.maximumNumberOfLines = 9;
}
return self;
}
- (CGFloat)layoutManager:(NSLayoutManager *)layoutManager lineSpacingAfterGlyphAtIndex:(NSUInteger)glyphIndex withProposedLineFragmentRect:(CGRect)rect
{
return 4.9;
}
@end
更新,仍未解决
【问题讨论】:
-
我要做的只是加载一个 UIWebView,它从你的 Xcode 文件中提取一个 .html 文件,该文件有一个
限制了这一点,因为它是一个相当简单的 javascript 函数。然后使用javascript注入来查询输入。还通过javascript和objective-c将你的UIWebView背景颜色设置为透明,这样它看起来不像是加载了一个网站,而只是一个UITextView(即使它不是一个UITextView)......当然这不是“答案”,所以我把它放在这个问题的 cmets 中。 -
UITextView,尤其是在 iOS 7 中有很多已知的 bug。您应该考虑使用PSPDFTextView 并查看是否可以为您解决问题。
-
我不认为我的问题与错误有关,因为我遇到的相同问题会追溯到 iOS 5 和 6。
-
只是想我会添加这个仍未解决。
-
如果您不想限制字符数量,这将很难做到。是否有特定原因使其不可滚动?问题是不可滚动字符和无限字符的组合。你将不得不在其他地方设置一个限制,否则它永远不会起作用。您不能将不确定的项目放在预定义的空间中。
标签: ios objective-c ios7 uitextview