iOS 10中UITextView顶部的空白


116

我有UITextView,其中包含一些文本。iOS 6一切正常,但现在使用iOS 7,它将空白留在顶部,然后将文本放在textview的中间下方。在此处输入图片说明

我没有设置任何contentOffSet。请帮忙!

Answers:


217

文本视图是滚动视图。视图控制器将自动添加内容偏移量以滚动视图,因为假定它们要在导航栏和状态栏后面向上滚动。

为防止这种情况,请在包含文本视图的视图控制器上设置以下属性:

self.automaticallyAdjustsScrollViewInsets = NO

7
这是一个更好的答案,因为它不仅解决了如何纠正问题,而且首先解决了为什么发生这种情况。
斯蒂芬·梅尔文

1
顺便说一句,您不必继承和覆盖。实例化UITextView之后,只需将AdjustsScrollViewInsets自动设置为NO。
左旋

1
@leftspin是一种非常罕见的情况,您没有将视图控制器子类化。覆盖该方法意味着您的代码仍将在较低的iOS版本上运行-设置该属性意味着您首先需要进行兼容性检查。
jrturton

1
因此,如果我的模型视图控制器在UINavigationController之外,则偏移将被清除吗?这有点疯狂……只有当我的文本视图与顶部对齐时,这种行为才是正确的,否则就是垃圾……有人能解释为什么苹果这样做吗?
Paul Brewczynski 2014年

@jrturton对此表示歉意,因为它是一个较旧的帖子,请原谅我,因为我是Objective-c的新手,但这当前是UIViewController的属性...它曾经是一种方法吗?
克雷格

58

IronManGill给出的当前答案不是一个好的解决方案,因为它并不是基于对问题为什么首先发生的理解。

jrturton的答案也不是解决问题的最干净的方法。您不需要覆盖。把事情简单化!

您只需要设置以下内容:

self.automaticallyAdjustsScrollViewInsets = NO;

在viewDidLoad方法中。

查看文档:https : //developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin


1
在情节提要中进行更改有时可能会更好。转到“身份检查器”->“用户定义的运行时属性”,然后在其中添加定义。
hufeng03

automaticallyAdjustsScrollViewInsets 不推荐使用。从iOS11,用contentInsetAdjustmentBehavior
心教堂

47

在界面生成器中,

  • 选择包含UITextView的视图控制器。
  • 转到属性检查器。
  • 取消选中“调整滚动视图插图”。

对于我在ios8中的案例,这是最简单的解决方案
platinor

3
注意:这是UIViewController的属性。找不到它,然后意识到我没有完全阅读文本
Maik639


24

前往Interface Builder

  1. 选择view controller包含您的text view
  2. 取消选中Adjusts Scroll View Insets属性

在此处输入图片说明


这就是我想要的。您也可以通过在viewController中添加'self.automaticallyAdjustsScrollViewInsets = false'来做到这一点
CodeOverRide

这是一个很好而精明的答案,刚好使我对“为什么此文本不显示”的搜索结束。
UpSampler

10

我真的很想知道这是否是一个真正的功能……仅当UIScrollViewUITextView作为视图控制器视图的所有子视图的深度较大时,才添加此64点自动插入。例如,如果您在滚动视图的后面添加一个视图(在这里我说的是z缓冲区,而不是视图约束),则不会自动添加此64点插入。

例如,此代码添加了插图:

在此处输入图片说明

在这种情况下,不添加插图:

在此处输入图片说明

这对我来说真的很奇怪……操作系统为什么要查看视图的深度来决定是否应扩展视图?



6

您可以UITextView通过添加以下内容删除顶部的空白:

yourTextView.textContainerInset = UIEdgeInsetsZero;

5

我通过将内容偏移设置为负值解决了此问题。这是Swift代码。

yourTextView.setContentOffset(CGPoint(x: 0, y: -150), animated: true)

这是保持插图和在透明条下正确滚动的最佳解决方案。我建议进行此修改。 [self.textView setContentOffset:CGPointMake(0.f, -self.topLayoutGuide.length) animated:NO];
InitJason

1
除此之外,对我没有任何帮助。Swift,Xcode 9.1。
Ashok

1

您需要了解的是,这与导航栏有关:

  • 如果您的内容位于导航栏下方,则您希望视图控制器自动调整滚动视图插图(默认)。
  • 如果您的内容没有位于导航栏下方(您可能已将顶部布局指南用于顶部空间约束),则可以像大多数其他答复中提到的那样禁用自动滚动视图插图调整。

1

我尝试了以下技巧,它奏效了。

- (void)viewDidLoad{
   self.textView.scrollEnabled = NO;  
}       
- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   self.textView.scrollEnabled = YES;
}


0

我敢肯定,这是一种非专业的解决方案,但是只要在textview后面放一个空白标签就可以解决问题。


1
这不是解决方案=)
Ilker Baltaci 2015年

0

这仅对我有用(可从iOS 7获得)

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.