我会对它做出正确的决定。我在视图中放置了UItextView
,当需要滚动查看所有文本时(当textView中存在大量文本时)textView有时会在文本的中间和文本的底部开始其他时间。
textView上未启用编辑。我需要一种方法来强制textView每次都从顶部开始。我看到一些问题,其他人使用内容偏移,但我真的不知道它是如何工作的,或者它是否适用于此处。
感谢您的帮助。
答案 0 :(得分:163)
这对我有用!
[self.textView scrollRangeToVisible:NSMakeRange(0, 0)];
self.textView.scrollRangeToVisible(NSMakeRange(0, 0))
将此覆盖方法添加到ViewController
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
textView.setContentOffset(CGPointZero, animated: false)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
textView.setContentOffset(CGPoint.zero, animated: false)
}
答案 1 :(得分:51)
上面的所有答案对我都不起作用。但是,秘密最终是在viewDidLayoutSubviews的覆盖范围内实现您的解决方案,如:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
welcomeText.setContentOffset(CGPointZero, animated: false)
}
HTH:)
答案 2 :(得分:14)
在Swift 2中
您可以使用它来使textView从顶部开始:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
myTextView.setContentOffset(CGPointZero, animated: false)
}
确认使用Swift 2在Xcode 7.2中工作
答案 3 :(得分:13)
请尝试以下代码 -
if ( [self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]){
self.automaticallyAdjustsScrollViewInsets = NO;
}
或者您也可以通过StoryBoard设置此属性 -
选择ViewController,然后选择属性检查器,现在取消选中Adjust Scroll View Insets
。
答案 4 :(得分:7)
对于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
}
}
答案 5 :(得分:6)
将您的UINavigationBar的translucent
媒体资源更新为NO
:
self.navigationController.navigationBar.translucent = NO;
这将修复视图在导航栏和状态栏下面的框架。
如果您必须显示和隐藏导航栏,请使用viewDidLoad
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone; // iOS 7 specific
希望这有帮助。
答案 6 :(得分:5)
通过大量测试,我发现必须在viewWillLayoutSubviews()函数中添加以下内容,以确保UITextView从一开始就显示出来:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
textViewTerms.scrollRangeToVisible(NSMakeRange(0, 0))
}
答案 7 :(得分:4)
Xcode 7.2 7c68; IOS 9.1
我的ViewController
包含UITextView
很复杂,并且在项目期间发生了很大的变化(IDE版本也可能会改变2~3次)。
我已经尝试了以上所有解决方案,如果您遇到同样的问题,请 PATIENT 。
有三种可能的密码'解决:
textView.scrollEnabled = false
//then set text
textView.scrollEnabled = true
textView.scrollRangeToVisible(NSMakeRange(0, 0))
textView.setContentOffset(CGPointZero, animated: false)
您可以将这些代码放在两个位置:
viewDidLoad()
viewDidLayoutSubviews()
结合它们,你得到3 * 2 = 6个解决方案,正确的组合取决于你ViewController
的复杂程度(相信我,在删除textView
以上的视图后,我需要找到一个新的组合)。
我发现:
当提出密码'在viewDidLayoutSubviews()
,但在textView.text = someStrings
viewDidLoad()
,textView
中的内容将会震动'有时。所以,把它们放在同一个地方。
最后一句话:尝试所有组合,这就是我在两个月内解决这个愚蠢错误超过三次的方法。
答案 8 :(得分:4)
将这一行代码放在 ViewDidLoad
中self.automaticallyAdjustsScrollViewInsets = false
答案 9 :(得分:4)
To operate correctly, EPIC requires a Perl interpreter" reason: Fail to execute command line "C:\Perl\bin\perl.exe
滚动似乎对很多人来说都是一个问题。从这里的答案(特别是this)和Apple Developer文档中收集,使用我自己的智慧,这里有一个适合我的解决方案。您可以修改代码以满足您的需求。
我的用例如下:相同的UITextView
用于不同的目的,在不同的情况下显示不同的内容。我想要的是,当内容改变时,旧的滚动位置被恢复,或者有时滚动到最后。完成后我不想要太多动画。特别是我不希望视图像所有文本都是新的一样动画。该解决方案首先在没有动画的情况下恢复旧的滚动位置,然后滚动到最终动画,如果需要的话。
你需要做什么(或者我应该说可以做)是如下扩展UITextView:
UITextView
它的作用是更新文本,然后使用extension UITextView {
func setText(text: String, storedOffset: CGPoint, scrollToEnd: Bool) {
self.text = text
let delayInSeconds = 0.001
let popTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(delayInSeconds * Double(NSEC_PER_SEC)))
dispatch_after(popTime, dispatch_get_main_queue(), {
self.setContentOffset(storedOffset, animated: false)
if scrollToEnd && !text.isEmpty {
let popTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(delayInSeconds * Double(NSEC_PER_SEC)))
dispatch_after(popTime, dispatch_get_main_queue(), {
self.scrollRangeToVisible(NSMakeRange(text.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) - 1, 0))
})
}
})
}
}
属性的存储值(或作为参数传递的任何内容),并相应地设置视图的偏移量。如果需要,在此之后,它会滚动到新的,可能更改的内容的末尾。
我是iOS编程的新手,我不知道为什么它能如此有效地工作,如果有人掌握了一些相关信息,那将会很高兴知道。这种方法也可能并不完美,所以我也可以接受改进的想法。
当然感谢NixonsBack在上面的链接背后发布答案。
我的第一篇帖子:),干杯!
答案 10 :(得分:3)
以下代码可以为您提供所需的效果。
[self.scrollView setContentOffset:CGPointMake(0, -self.scrollView.contentInset.top) animated:YES];
您需要更换" self.scrollView"使用滚动视图的名称。在设置了滚动视图的文本后,您应该将此代码放入。
答案 11 :(得分:2)
这对我有用:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
textView.scrollRectToVisible(CGRect(origin: CGPointZero, size: CGSizeMake(1.0, 1.0)), animated: false)
}
答案 12 :(得分:2)
在UITextView
文件中为ViewController.swift
创建一个插座。在ViewDidLoad
部分中输入以下内容:
夫特:
self.textView.contentOffset.y = 0
我试过了:
self.textView.scrollRangeToVisible(NSMakeRange(0, 0))
答案 13 :(得分:2)
这适用于Xcode 8.3.3:
$(document).ready(function() {
var URLCheck = document.referrer || ''; // make sure referrer is a string
var frameLocation = URLCheck.match(/:\/\/(.[^/]+)/)[1];
if(frameLocation !== null) {
frameLocation = frameLocation[1];
}
var whiteLocation = 'mywebsite.com';
if (whiteLocation == frameLocation) {
$('#adprimary').remove();
}
});
答案 14 :(得分:1)
我将zeeple的答案翻译成MonoTouch / Xamarin(C#)。
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
myForm.SetContentOffset(new CoreGraphics.CGPoint(0,0), animated: false);
}
答案 15 :(得分:0)
我必须在这里实现两个答案才能让我的观点按照我的意愿运作:
Juan Juan Cruz Serrano:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
textView.setContentOffset(CGPoint.zero, animated: false)
}
来自Murat Yasar:
automaticallyAdjustsScrollViewInsets = false
这给了一个UITextView,它加载了最顶部的滚动,并且一旦滚动开始就不会改变插图。非常奇怪,这不是默认行为。
答案 16 :(得分:0)
要每次强制
textView
从顶部开始,请使用以下代码:
Swift 4.2
:
override func viewDidLayoutSubviews() {
textView.setContentOffset(CGPoint(x: 0, y: 0), animated: false)
}
Objective-C
:
- (void)viewDidLayoutSubviews {
[self.yourTextView setContentOffset:CGPointZero animated:NO];
}
答案 17 :(得分:0)
Swift 4.2和Swift 5
设置文本前后的内容偏移量。 (在主线程上)
let animation = false //or whatever you want
self.mainTextView.setContentOffset(.zero, animated: animation)
self.mainTextView.attributedText = YOUR_ATTRIBUTED_TEXT
self.mainTextView.setContentOffset(.zero, animated: animation)
答案 18 :(得分:-1)
在我的情况下,我在Custom tableview单元格中加载了一个textView。以下是我所做的工作,以确保textview中的文本加载到我的自定义单元格的textview中文本的顶部。
1。)在故事板中,通过取消选中按钮设置textview ScrollEnabled = false。
2。)在加载视图后,在textview上将isScrollEnabled设置为true。我设置了如下所示的小延迟:
override func awakeFromNib() {
super.awakeFromNib()
let when = DispatchTime.now() + 1
DispatchQueue.main.asyncAfter(deadline: when){
self.textView.isScrollEnabled = true
}
}
无论如何,如果您处于我的状态,请尝试将scrollEnabled设置为false,然后在加载视图时,将scrollEnabled设置为true。