Ale*_*lff 75 xcode cocoa-touch objective-c ios swift
我会正确的.我有一个UItextView放置在我的视图中,当需要滚动查看所有文本时(当textView中存在大量文本时)textView有时会在文本的中间开始,而文本的底部则会在其他时间开始.
textView上未启用编辑.我需要一种方法来强制textView每次都从顶部开始.我看到一些问题,其他人使用内容偏移,但我真的不知道它是如何工作的,或者它是否适用于此处.
谢谢你的帮助.
Dav*_*ruz 168
这对我有用!
[self.textView scrollRangeToVisible:NSMakeRange(0, 0)];
Run Code Online (Sandbox Code Playgroud)
self.textView.scrollRangeToVisible(NSMakeRange(0, 0))
Run Code Online (Sandbox Code Playgroud)
将此覆盖方法添加到ViewController
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
textView.setContentOffset(CGPointZero, animated: false)
}
Run Code Online (Sandbox Code Playgroud)
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
textView.contentOffset = .zero
}
Run Code Online (Sandbox Code Playgroud)
zee*_*ple 54
上面的所有答案对我都不起作用.但是,秘密最终是在viewDidLayoutSubviews的覆盖范围内实现您的解决方案,如:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
welcomeText.contentOffset = .zero
}
Run Code Online (Sandbox Code Playgroud)
HTH :)
Nic*_*k89 14
在Swift 2中
您可以使用它来使textView从顶部开始:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
myTextView.setContentOffset(CGPointZero, animated: false)
}
Run Code Online (Sandbox Code Playgroud)
确认使用Swift 2在Xcode 7.2中工作
kes*_*rma 13
试试以下代码 -
if ( [self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]){
self.automaticallyAdjustsScrollViewInsets = NO;
}
Run Code Online (Sandbox Code Playgroud)
或者您也可以通过StoryBoard设置此属性 -
选择ViewController,然后选择现在未选中的属性检查器Adjust Scroll View Insets.
对于Swift> 2.2,我在使用上述方法时遇到了iOS 8和iOS 9的问题,因为没有单一的答案可行,所以这里是我为使它们都工作所做的.
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 9.0, *) {
textView.scrollEnabled = false
}
self.textView.scrollRangeToVisible(NSMakeRange(0, 0))
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
if #available(iOS 9.0, *) {
textView.scrollEnabled = true
}
}
Run Code Online (Sandbox Code Playgroud)
将您的UINavigationBar translucent属性更新为NO:
self.navigationController.navigationBar.translucent = NO;
Run Code Online (Sandbox Code Playgroud)
这将修复视图在导航栏和状态栏下面的框架.
如果您必须显示和隐藏导航栏,请使用下面的代码 viewDidLoad
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone; // iOS 7 specific
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
通过大量测试,我发现必须在viewWillLayoutSubviews()函数中添加以下内容,以确保UITextView从一开始就显示出来:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
textViewTerms.scrollRangeToVisible(NSMakeRange(0, 0))
}
Run Code Online (Sandbox Code Playgroud)
Xcode 7.2 7c68; iOS 9.1
我ViewController包含的内容UITextView很复杂,并且在项目过程中进行了很多更改(IDE版本也可能更改了2〜3次)。
我已经尝试了所有上述解决方案,如果您遇到相同的问题,请耐心等待。
有三种可能的“秘密代码”可以解决:
textView.scrollEnabled = false
//then set text
textView.scrollEnabled = truetextView.scrollRangeToVisible(NSMakeRange(0, 0))textView.setContentOffset(CGPointZero, animated: false)您可以在两个地方放入这些代码:
viewDidLoad()viewDidLayoutSubviews()组合它们,您将获得3 * 2 = 6个解决方案,正确的组合取决于您的复杂ViewController程度(相信我,删除上面的视图后textView,我需要找到一个新的组合)。
我发现:
当在viewDidLayoutSubviews()中但textView.text = someStrings在中放置“秘密代码”时,中viewDidLoad()的内容textView有时会“抖动”。因此,将它们放在同一位置。
最后一句话:尝试所有组合,这就是我在两个月内解决此愚蠢错误超过三遍的方式。
| 归档时间: |
|
| 查看次数: |
34085 次 |
| 最近记录: |