【发布时间】:2018-02-23 13:29:44
【问题描述】:
我在 iMessage 扩展中有一个非常基本的视图控制器。 (当然是扩展视图)。我知道您不能在紧凑视图中使用键盘输入...
UITextView 被限制在它上面和下面的 Element。它有一个固定的高度和宽度。约束都是有序的,没有被破坏。
界面生成器中文本视图上的所有选项都保留为默认值。
UITextView 出现以下问题:
当我开始编辑时,光标几乎看不到。 (在场地底部,垂直切断一半)。
键入第一个字母会将光标带到文本视图的垂直中心。
输入一个新行,然后输入一个字符,将光标再次放回下方。
然后键入后续字符会将光标再次带到垂直中心。并且每个其他字符再次将整个文本视图滚动到底部。因此,每次击键都会出现这种奇怪的上下弹跳行为。
当我滚动时,右侧的滚动条视觉提示无法反映文本视图的正确高度。 (滚动条只下降到文本视图高度的一半。)
我希望 UITextView 默认可以这样工作:
当激活和编辑时,光标应该转到文本视图的顶部。
在换行后键入键时,文本视图不应跳转。
垂直滚动条指示器应该显示整个文本字段,而不是一半。
所以,显然 Text View 内部的 Scroll View 在确定事物的大小时存在问题。
有谁知道,如果这是 iMessage 特定问题,或者是否有人在 iMessage 之外也遇到过这个问题,以及如何解决?
问题的视频演示: https://youtu.be/1bkvHnkXLWM
更新:我正在使用子视图控制器将我的视图控制器嵌入到根控制器中。我尝试了一个空白的 Hello World 应用程序,默认情况下 UITextView 工作正常。因此,问题与我嵌入子视图控制器的方式有关。
这是我用来嵌入子视图控制器的代码:
- (void)showViewController:(UIViewController*)vcToShow isPop:(BOOL)isPop
{
NSLog(@"Presenting Controller: %@", vcToShow);
[self.activeVC willMoveToParentViewController:nil];
[self addChildViewController:vcToShow];
vcToShow.view.translatesAutoresizingMaskIntoConstraints = NO;
vcToShow.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.rootView addControls:@[vcToShow.view]
align:VerticalAlignStretchToFullHeight];
UIViewController* currentVC = self.activeVC;
self.activeVC = vcToShow;
vcToShow.view.alpha = 0.0f;
[self transitionFromViewController:currentVC
toViewController:vcToShow
duration:0.3
options:UIViewAnimationOptionTransitionNone
animations:^{
vcToShow.view.alpha = 1.0f;
}
completion:^(BOOL finished) {
[currentVC removeFromParentViewController];
[vcToShow didMoveToParentViewController:self];
[self updateScreenState];
if (isPop) {
[self removeReferenceToController:currentVC];
}
}];
}
【问题讨论】:
-
只是一个疯狂的猜测,但可能是以下行:` vcToShow.view.translatesAutoresizingMaskIntoConstraints = NO;
? you are using autoresizing mask later, is that not supposed to be set toYES`? -
嗨。将 translatesAutoresizingMaskIntoConstraints 更改为 YES,对 UITextView 没有任何影响。谢谢。
标签: ios iphone uiscrollview uitextview imessage-extension