gpt4 book ai didi

ios - iMessage Extension : UITextView in Child View Controller, 滚动行为有多个问题

转载 作者:行者123 更新时间:2023-11-29 00:12:04 25 4
gpt4 key购买 nike

我在 iMessage 扩展中有一个非常基本的 View Controller 。 (当然是扩展 View )。我知道您不能在紧凑 View 中使用键盘输入...

UITextView 受限于其上方和下方的元素。它有固定的高度和宽度。约束都井井有条,没有被打破。

Interface Builder 中 textview 的所有选项都保留为默认值。

UITextView 出现以下问题:

  1. 当我开始编辑时,光标几乎不可见。 (在 field 的底部,垂直切断的一半)。

  2. 键入第一个字母会将光标移至 TextView 的垂直中心。

  3. 放置一个新行,然后放置一个字符,将光标再次放回下方。

  4. 然后输入后续字符将使光标再次回到垂直中心。每个其他字符都会再次将整个 TextView 滚动到底部。因此,每次击键时都会出现这种奇怪的上下弹跳行为。

  5. 当我滚动时,右侧的滚动条视觉提示未反射(reflect) TextView 的正确高度。 (滚动条仅向下移动 TextView 高度的一半。)

我希望 UITextView 默认情况下像这样工作:

  1. 激活和编辑时,光标应位于 TextView 的顶部。

  2. 在新行后键入按键时, TextView 不应跳转。

  3. 垂直滚动条指示器应显示文本字段的整个范围,而不是一半。

因此,显然 TextView 内的内部 ScrollView 在计算事物的大小时存在问题。

有谁知道这是否是 iMessage 特定问题,或者是否有人在 iMessage 之外也遇到过此问题,以及如何解决?

我的 IB 约束(向下的第二个 View 是 TextView ): enter image description here

问题的视频演示: https://youtu.be/1bkvHnkXLWM

更新:我正在使用 subview Controller 将我的 View Controller 嵌入到根 Controller 中。我尝试了一个空白的 Hello World 应用程序,默认情况下 UITextView 正常工作。因此,这个问题与我嵌入 subview Controller 的方式有关。

这是我用来嵌入我的 subview Controller 的代码:

- (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];
}
}];
}

最佳答案

我有一个解决方案。

我没有使用 Interface Builder 来放置我的 UITextView,而是使用我自己的编程约束生成方法来创建和放置 UITextView,仅在 ViewDidAppear 之后。

我怀疑在 Interface builder 呈现 Child VC 的 View 时,它没有填充 UITextView 的内部 ScrollView 所需的所有内容。因此, ScrollView 使用错误的维度值进行了初始化,因此会在任何与滚动相关的内容上出现故障。在以编程方式(在 Child VC 中)完成 viewDidAppear 中的所有操作后, TextView 现在可以正确滚动,并且光标始终位于开头,按预期工作。

更新代码:

  1. 将 UITextView 完全从界面生成器中移除。

  2. 以编程方式添加(从 viewDidAppear 调用):

    self.textView = [[UITextView alloc] init];
    self.textView.translatesAutoresizingMaskIntoConstraints = NO;

    CGFloat topPadding = self.instructionLabel.frame.origin.y + self.instructionLabel.frame.size.height + TEXT_VIEW_TOP_PADDING;

    // This custom method generates Visual Constraint format for me
    // so i don't have to write manual individual constraint syntax.
    [self.rootView addControls:@[self.textView]
    align:VerticalAlignTop
    withHeight:TEXT_VIEW_HEIGHT
    verticalPadding: 0
    horizontalPadding: 20
    topPadding: topPadding];

关于ios - iMessage Extension : UITextView in Child View Controller, 滚动行为有多个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46221211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com