【问题标题】:UIScrollView contentSize gets resetUIScrollView contentSize 被重置
【发布时间】:2013-03-14 20:22:53
【问题描述】:

我需要动态地将文本字段添加到滚动视图。我能够做到,添加后我每次都会计算和更新滚动视图的内容大小。

更新内容大小后,我可以在屏幕上查看它,一旦我编辑文本字段(键盘消失),我将内容大小重置为原始值。我在这里错过了什么吗?滚动视图是通过xib创建的。

【问题讨论】:

  • 有什么问题,截图和代码会有所帮助。
  • 发布您的代码,该代码放置在文本文件的委托方法中。

标签: iphone ios cocoa


【解决方案1】:

您可以跟踪最后一个 textFiled 的 y 位置。

现在在所有文本字段添加到 ScrollView 后使用下面的行。

[scrollView setContentSize:CGSizeMake(320, yPos)];

对于键盘问题用户,请使用以下代码。

- (BOOL)textFieldShouldReturn:(UITextField *)textField{

[textField resignFirstResponder];
[scrollView setContentSize:CGSizeMake(320, yPos)];
return YES;
}

希望这会对你有所帮助。

一切顺利!!!

【讨论】:

    【解决方案2】:

    viewDidLoad方法中,

    y = 500; // As you wish
    
    scrMain.delegate = self;
    scrMain.contentSize = CGSizeMake(320, y);
    

    然后,对于文本字段输入

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
    {
        scrMain.contentSize = CGSizeMake(320, y + 50);
    }
    

    返回键后,

    - (BOOL)textFieldShouldReturn:(UITextField *)textField{
    
        [textField resignFirstResponder];
    
        scrMain.contentSize = CGSizeMake(320, y);
        return YES;
     }
    

    【讨论】:

    • 我确实在类变量中保留了新的内容大小,然后在键盘返回时将其重置。不幸的是,这与视图移位代码(当键盘出现时将视图向上移位的代码,只是为了将文本字段带到可见区域)相吻合。仅调用 [mScrollView setContentSize:mScrollContentSize];扰乱了我的所有其他功能。当键盘出现和消失时,我不明白为什么要重置内容大小。我迷路了!
    • 只是想到会发布解决方案。这与自动布局有关。取消选中自动布局修复了一半问题,Apple 的键盘编程指南修复了另一半。有一个想法我会提到(如果有帮助的话),即使应用程序处于横向模式,键盘尺寸也始终以纵向模式返回。此外,一旦关闭自动布局,滚动的 contentSize 将在 viewDidAppear 方法中手动设置
    • 键盘尺寸始终以纵向模式返回,即使应用程序处于横向模式。 -> 不同意这个。
    • 我的应用程序只支持横向模式。我必须滚动滚动视图才能将文本字段带到可见区域。我从 Apple 的键盘编程指南中复制了 keyboardWasShown 函数,该指南使用键盘大小向上滚动文本字段。我必须将横向模式的宽度设置为高度,将高度设置为宽度才能使其工作。 keyboardSize = CGSizeMake(keyboardSize.height, keyboardSize.width);
    【解决方案3】:
        - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
        {
            self.scrollView.frame = CGRectMake(0, 0, 320, 240);// set height of self.scrollView.frame, as you need.
            return YES;
        }
    
        - (BOOL)textFieldShouldReturn:(UITextField *)textField 
       {
    
            [self.txtFieldName resignFirstResponder];
            .
            ,
            .
    
            self.scrollView.frame = CGRectMake(0, 0, 320, 460); // set height of self.scrollView.frame, as you need.
            [self.scrollView setContentSize:CGSizeMake(320, 465)]; // set height of self.scrollView.ContentSize, as you need.
    
            return YES;
        }
    

    【讨论】:

    • 请查看此示例tbf.me/a/9llOl。请在添加新字段之前和添加新字段之后尝试编辑字段
    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多