【问题标题】:How can i fix my scrollView dynamically when i have more than one textViews in it?当我有多个 textView 时,如何动态修复我的 scrollView?
【发布时间】:2011-07-01 04:52:49
【问题描述】:

我有一个滚动视图,它由 3 个文本视图、按钮和详细视图中的标签组成。我正在使用 3 个文本视图,因为我的视图标题、日期和描述需要不同的字体。问题是有时描述很长,有时描述又小又与标题相同。然后由于标题和描述之间有很多空格,因此视图看起来一点也不好看。是否可以动态设置 textView 和滚动视图的大小,或者有没有更好的方法来解决这个问题。提前谢谢

【问题讨论】:

    标签: iphone objective-c xcode interface-builder ios-4.2


    【解决方案1】:

    您需要调整文本视图的框架以匹配它们各自的 contentSizes(请参阅此处的最佳答案:How do I size a UITextView to its content? 关于如何做到这一点,使用 textview 的 contentSize 属性),然后调整scrollView 基于所有控件的框架。

    假设你的文本视图是垂直连续放置的(如果有间距等,只需调整代码):

    // (first adjust each text view's frame per the linked answer)
    ...
    // then adjust the frames of the content
    CGRect topTextViewFrame = topTextView.frame;
    CGRect middleTextViewFrame = middleTextView.frame;
    middleTextViewFrame.origin.y = topTextViewFrame.origin.y + topTextViewFrame.size.height;
    middleTextView.frame = middleTextViewFrame;
    CGRect bottomTextViewFrame = bottomTextView.frame;
    bottomTextViewFrame.origin.y = middleTextViewFrame.origin.y + middleTextViewFrame.size.height;
    // then adjust your other controls based on these frames, for example:
    CGRect myButtonFrame = myButton.frame;
    myButtonFrame.origin.y = bottomTextViewFrame.origin.y + bottomTextViewFrame.size.height;
    // finally adjust the contentSize of the scrollview assuming the button is the bottom element
    CGSize csize = myScrollView.contentSize;
    csize.height = myButtonFrame.origin.y + myButtonFrame.size.height;
    myScrollView.contentSize = csize;
    

    【讨论】:

    • 我将所有文本视图和按钮一个接一个地放在滚动视图中,然后我尝试按照你在这段代码中所说的去做。但它不工作
    • 当你说“它不起作用”时,你需要更准确地表达你的意思。什么不工作?文本视图与内容的大小,或框架的位置,或两者兼而有之?当我努力正确放置视图时,我喜欢为视图设置不同的背景颜色,这有助于突出显示它们的位置
    • 每个 textView 的框架都应该从它的上 textViews 框架结束的地方开始。但它不是那样发生的。如果第一个 textViews 框架有更多文本,那么它会超过第二个 textView。并且在某些 detailViews 中,最后一个按钮不适合 scrollView 的内容。
    • 你需要坚持一个问题,停止创造本质上相同的新问题。做一些调试,打印出所有的帧,然后双重/三重检查你的计算。从正确调整顶部框架的大小开始,然后逐一定位下部框架。您应该能够立即指出一些具体问题,例如:“顶部 textview 的框架未调整到其内容的大小”。张贴对正在发生的事情的具体陈述,并提出更有针对性的问题,而不是模糊的“它不起作用”的陈述。
    【解决方案2】:

    您可以将帧的大小设置为取决于字符长度,方法是将开始时的帧设置为:

    CGRectMake (0.0, 0.0, [yourString count]*10, 30.0);
    

    当我让 UIPopover 提供一个变量名时,我就是这样做的。

    【讨论】:

      猜你喜欢
      • 2020-12-19
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      相关资源
      最近更新 更多