【问题标题】:UIScrollView won't adjust height to fit subviewsUIScrollView 不会调整高度以适应子视图
【发布时间】:2012-10-13 01:08:41
【问题描述】:

我有一个UITextView,它从 RSS 提要动态设置其文本。 textview 是UIScrollview 的子视图。最终,我正在创建一个移动报纸应用程序,因此用户应该能够滚动浏览文本(和其他子视图)。

在 IB 中创建视图后,我添加了

NSString *sourceCode = [NSString stringWithContentsOfURL:[NSURL URLWithString:self.URL] encoding:NSUTF8StringEncoding error:&error];
sourceCode = [self parseHTMLText:sourceCode];
CGSize maximumLabelSize = CGSizeMake(320,9999);
CGSize txtStringSize = [sourceCode sizeWithFont:self.body.font
                              constrainedToSize:maximumLabelSize];
CGRect newlblFrame = CGRectMake(0, 0, 320, txtStringSize.height);
self.body.frame = newlblFrame; //body is the textview
self.body.text = sourceCode;
self.scroll.contentSize=CGSizeMake(320, self.body.frame.size.height+300); //scroll is scrollview

典型的NSLog 将显示body frame = {{0, 0}, {320, 2088}} scrollview frame = {{0, 0}, {320, 417}} scrollview content size = {320, 2388}

但是,当我运行应用程序时,body 将其界面构建器高度保持在 196 左右,并且滚动视图不会滚动(当我移动它时,它只是弹回原来的位置)

附带说明,当我尝试使用 CGRectMake 手动更改 textview 的框架时,NSLog 显示正确的高度,但视图看起来并没有什么不同。我确保它在 IB 中正确连接,因为我可以调整其他属性,例如背景颜色。

编辑:

在我将 textview 的 cliptoBounds 属性设置为 NO 后,textview 现在会调整其高度并尝试显示整个文本。但是,它在屏幕末尾切断,我仍然无法滚动。

这是我目前看到的。为了方便起见,我将滚动视图的背景颜色设为灰色。我不确定为什么部分滚动视图部分为白色,部分为灰色。 (标题)是一个单独的标签)

【问题讨论】:

  • 在 UIlabel 上打印文本后更改滚动视图 contentSize。我认为它应该可以解决您的问题。
  • 我尝试在body.text = ...之后添加它,但结果是一样的
  • 在代码中再添加一行:self.body.numberOfLines = 0; self.by.frame = newlblFrame 之后;我也在编辑上面的代码。
  • 让我知道它是否有效。
  • 我已经在界面生成器中设置了,但我也尝试在代码中添加它。结果相同

标签: objective-c ios uiscrollview uilabel


【解决方案1】:

我通过将代码从viewDidLoad 移动到viewDidAppear 解决了这个问题。显然,这是 Xcode 4.5 特有的问题,由 AutoLayout 功能覆盖 viewDidLoad 方法中的逻辑引起。可以在here找到更好的解释。

【讨论】:

    【解决方案2】:

    希望对你有帮助

    self.scrollview.contentSize=CGSizeMake(320, label.frame.size.height+30);

    【讨论】:

    • 滚动视图的框架没有改变
    • 它不会改变滚动视图大小它会增加滚动视图内容大小
    • 我的意思是我仍然无法滚动浏览所有文本
    • 在这里给出所有标签的总大小。然后将得到整个滚动视图
    【解决方案3】:

    尝试添加这个:

    [_scrollView setClipsToBounds:YES];
    

    【讨论】:

      【解决方案4】:

      试试这个:

      CGSize maximumSize = CGSizeMake(200.0, 30.0); // Specify your size. It was for my screen. 
                  UIFont *txtFont = <Ur Font size & Var>;
                  //new
                  //fontValue = txtFont;
                  //new
      
                  lblValue.font = txtFont; 
                  lblValue.lineBreakMode = UILineBreakModeWordWrap;
      
                  CGSize txtStringSize = [commentTxt sizeWithFont:txtFont 
                                                constrainedToSize:maximumSize 
                                                    lineBreakMode:lblValue.lineBreakMode];
      
                  CGRect newlblFrame = CGRectMake(105.0, y, 200.0, txtStringSize.height);
      
                  lblValue.frame = newlblFrame;          
                  lblValue.text = @"Your String";
      

      在此之后设置滚动内容大小。希望它对你有用。它对我有用。

      【讨论】:

      • 我试过了,但还是不行。我将添加上面的代码
      【解决方案5】:

      尝试通过以下方式解决。

      // adjust the height of UITextView with content height
      CGRect frame = self.body.frame;
      frame.size.height = self.body.contentSize.height;
      self.body.frame = frame;
      
      // adjust UIScrollView's height with the height of UITextView
      self.scroll.frame = frame;
      

      【讨论】:

      • 没关系,我解决了。我将解决方案作为单独的答案发布。
      猜你喜欢
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多