我创建了一个UITextView
并添加了大量文本。当我启动视图时,UITextView
总是部分向下滚动。因为用户可以向上滚动,但它只是感觉很奇怪。
会发生什么?我错过了任何明显的设置吗?
请参考下图。部分文字被删除。我借用link中的文字。
我开始了一个简单的单视图应用程序。这就是我viewDidLoad
的样子:
- (void)viewDidLoad {
[super viewDidLoad];
NSString* path = [[NSBundle mainBundle] pathForResource:@"license"
ofType:@"txt"];
NSString* terms = [NSString stringWithContentsOfFile:path
encoding:NSUTF8StringEncoding
error:nil];
self.textField.text = terms;
}
这是我的故事板:
这是手动向上滚动到顶部的方式。
答案 0 :(得分:5)
在viewDidLoad
:
[self.textField scrollRangeToVisible:NSMakeRange(0, 1)];
像这样:
- (void)viewDidLoad {
[super viewDidLoad];
NSString* path = [[NSBundle mainBundle] pathForResource:@"license"
ofType:@"txt"];
NSString* terms = [NSString stringWithContentsOfFile:path
encoding:NSUTF8StringEncoding
error:nil];
self.textField.text = terms;
[self.textField scrollRangeToVisible:NSMakeRange(0, 1)];
}
答案 1 :(得分:3)
这种情况曾经发生在横向模式下的所有iPhone / iPod设备上,而其他设备的解决方案也可以使用。现在它只适用于横向模式下的iPhone 6+或iPhone 6s +。这是一个解决它的方法:
public void add(Character a, Character b){
if (adj.containsKey(a)){
//get a reference to the existing linked list
LinkedList<Character> l = adj.get(a);
//add to the existing LinkedList
//You need to do a null check here to make sure (l != null)
l.add(b)
}else{
//create a new LinkedList and add to it.
LinkedList<Character> l = new LinkedList<Character>();
l.add(b);
adj.put(a, l);
}
}
}
视图在- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
dispatch_async(dispatch_get_main_queue(), ^{
[self.textView scrollRangeToVisible:NSMakeRange(0, 1)];
});
}
之后和viewWillAppear
之前以某种方式滚动,这就是我们需要上述发送的原因。
答案 2 :(得分:2)
我有同样的问题,我通过获取上一个滚动位置并在更新&#34;文本&#34;
后重置它来解决它CGPoint p = [self.texField contentOffset];
self.textField.text = terms;
[self.textField setContentOffset:p animated:NO];
[self.textField scrollRangeToVisible:NSMakeRange([tv.text length], 0)];
答案 3 :(得分:1)
对于那些使用Xamarin的人来说,这是唯一适合我的解决方案:
textView.Text = "very long text";
DispatchQueue.MainQueue.DispatchAsync(() =>
{
textView.ContentOffset = new CGPoint(0, 0);
});
答案 4 :(得分:0)
对我来说最好的解决方案(目标C):
- (void)viewDidLayoutSubviews {
[self.myTextView setContentOffset:CGPointZero animated:NO];
}