Sam*_*art 95 iphone uitextview ios
好的,我遇到了一些问题UITextView.这是问题所在:
我添加了一些文字UITextView.然后用户双击以选择某些内容.然后我改变UITextView(以编程方式如上)和UITextView 滚动到页面底部的文本,其中有一个光标.
但是,这不是用户点击的地方.UITextView无论用户点击何处,它始终滚动到底部.
所以这是我的问题:UITextView每次更改文本时,如何强制滚动到顶部?我试过contentOffset和scrollRangeToVisible.都没有工作.
任何建议,将不胜感激.
Way*_* Lo 146
UITextView*note;
[note setContentOffset:CGPointZero animated:YES];
Run Code Online (Sandbox Code Playgroud)
这对我来说.
Swift版本(Xcode 9.3上带有iOS 11的Swift 4.1):
note.setContentOffset(.zero, animated: true)
Run Code Online (Sandbox Code Playgroud)
小智 68
如果有人在iOS 8中遇到此问题,我发现只需设置UITextView'stext属性,然后scrollRangeToVisible使用NSRangewith location:0,调用length:0,就可以了.我的文本视图不可编辑,我测试了可选择的和不可选择的(两个设置都没有影响结果).这是一个Swift示例:
myTextView.text = "Text that is long enough to scroll"
myTextView.scrollRangeToVisible(NSRange(location:0, length:0))
Run Code Online (Sandbox Code Playgroud)
小智 44
这是我的解决方案......
override func viewDidLoad() {
textView.scrollEnabled = false
textView.text = "your text"
}
override func viewDidAppear(animated: Bool) {
textView.scrollEnabled = true
}
Run Code Online (Sandbox Code Playgroud)
Rya*_*TCB 35
调用
scrollRangeToVisible(NSMakeRange(0, 0))
Run Code Online (Sandbox Code Playgroud)
可以工作,但称之为
override func viewDidAppear(animated: Bool)
Run Code Online (Sandbox Code Playgroud)
Mar*_*ria 29
我在HTML中使用了attributionString,文本视图不可编辑.设置内容偏移对我来说也不起作用.这对我有用:禁用启用滚动,设置文本然后再次启用滚动
[yourTextView setScrollEnabled:NO];
yourTextView.text = yourtext;
[yourTextView setScrollEnabled:YES];
Run Code Online (Sandbox Code Playgroud)
小智 18
由于这些解决方案都不适合我,而且浪费了太多时间拼凑解决方案,这最终为我解决了这个问题.
override func viewWillAppear(animated: Bool) {
dispatch_async(dispatch_get_main_queue(), {
let desiredOffset = CGPoint(x: 0, y: -self.textView.contentInset.top)
self.textView.setContentOffset(desiredOffset, animated: false)
})
}
Run Code Online (Sandbox Code Playgroud)
这非常愚蠢,这不是此控件的默认行为.
我希望这有助于其他人.
Ben*_*man 17
我不确定我是否理解你的问题,但是你是否只想将视图滚动到顶部?如果是这样你应该这样做
[textview scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];
Cha*_*Guy 12
对于iOS 10和Swift 3,我做了:
override func viewDidLoad() {
super.viewDidLoad()
textview.isScrollEnabled = false
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
textView.isScrollEnabled = true
}
Run Code Online (Sandbox Code Playgroud)
为我工作,不确定你是否遇到了最新版本的Swift和iOS的问题.
小智 10
我有一个更新的答案,它将使textview正确显示,并且没有用户体验滚动动画.
override func viewWillAppear(animated: Bool) {
dispatch_async(dispatch_get_main_queue(), {
self.introductionText.scrollRangeToVisible(NSMakeRange(0, 0))
})
Run Code Online (Sandbox Code Playgroud)
这就是它在iOS 9 Release上的工作方式,因为textView在屏幕上显示之前会滚动到顶部
- (void)viewDidLoad
{
[super viewDidLoad];
textView.scrollEnabled = NO;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
textView.scrollEnabled = YES;
}
Run Code Online (Sandbox Code Playgroud)
小智 8
这就是我做到的
斯威夫特4:
extension UITextView {
override open func draw(_ rect: CGRect)
{
super.draw(rect)
setContentOffset(CGPoint.zero, animated: false)
}
}
Run Code Online (Sandbox Code Playgroud)
这对我有用
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
DispatchQueue.main.async {
self.textView.scrollRangeToVisible(NSRange(location: 0, length: 0))
}
}
Run Code Online (Sandbox Code Playgroud)
我不得不在viewDidLayoutSubviews内部调用以下内容(在 viewDidLoad内部调用为时过早):
myTextView.setContentOffset(.zero, animated: true)
Run Code Online (Sandbox Code Playgroud)
尝试此操作将光标移动到文本的顶部.
NSRange r = {0,0};
[yourTextView setSelectedRange:r];
Run Code Online (Sandbox Code Playgroud)
看看情况如何.确保在所有事件都被触发后或者您正在做的事情完成之后调用此函数.
[txtView setContentOffset:CGPointMake(0.0, 0.0) animated:YES];
Run Code Online (Sandbox Code Playgroud)
这行代码适合我.
小智 5
结合之前的答案,现在应该可以了:
talePageText.scrollEnabled = false
talePageText.textColor = UIColor.blackColor()
talePageText.font = UIFont(name: "Bradley Hand", size: 24.0)
talePageText.contentOffset = CGPointZero
talePageText.scrollRangeToVisible(NSRange(location:0, length:0))
talePageText.scrollEnabled = true
Run Code Online (Sandbox Code Playgroud)
我的问题是在视图出现时将textView设置为滚动到顶部.适用于iOS 10.3.2和Swift 3.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// It doesn't work. Very strange.
self.textView.setContentOffset(CGPoint.zero, animated: false)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// It works, but with an animation effection.
self.textView.setContentOffset(CGPoint.zero, animated: false)
}
Run Code Online (Sandbox Code Playgroud)
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// It works.
self.textView.contentOffset = CGPoint.zero
}
Run Code Online (Sandbox Code Playgroud)
小智 5
只是你可以使用这个代码
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
textView.scrollRangeToVisible(NSMakeRange(0, 0))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65933 次 |
| 最近记录: |