【问题标题】:How to configure iOs UITextViews and UILabels so that their height is determined by their content如何配置 iOs UITextViews 和 UILabels 以便它们的高度由它们的内容决定
【发布时间】:2011-01-19 16:33:24
【问题描述】:

我基本上是想找到正确的方法来设计一个 UITableViewCell,它里面有两个 UITextViews 和三个 UILabel。两个 UITextView 具有动态内容,直到运行时才能确定它们的大小。

我已经尝试了各种方法来根据运行时加载的内容重新计算 UITextViews 的高度,虽然非常费力和愚蠢,但我已经让它工作了,但它们随后在定位的 UILabel 上流血了他们下面的xib。

在计算 UITextViews 的新大小后,我真的需要重新计算每个 UILabel 的 y 坐标吗?有没有办法简单地让 xib 中的元素根据它们的新大小“推”它们下面的元素?

配置具有多个动态文本视图的 UITableViewCell 以使我的整个应用程序不包含计算高度和坐标的代码的正确方法是什么?

或者我不应该在同一个 UITableViewCell 中放置多个动态 UITextView 的答案?

【问题讨论】:

    标签: iphone ios


    【解决方案1】:

    我用这样的东西来计算单元格的高度

    tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    

    功能

        CGSize labelSize = [self.comments sizeWithFont:[UIFont fontWithName:@"Verdana" size:17.0] 
                                                     constrainedToSize:CGSizeMake(280.0f, MAXFLOAT) 
                                                         lineBreakMode:UILineBreakModeWordWrap];
        return labelSize.height + 20;
    

    +20 用于填充。

    如果您拥有上面提到的每个单元格,那么您可以创建一个 UITableViewCell 类,其中包含以下 UIView 元素。

    【讨论】:

      【解决方案2】:

      iOS 似乎没有任何类型的流布局引擎——至少没有我能想到的。 但是,如果您的标签位于 UITableViewCell 的底部,您可能可以通过将 UILabel 的 autoresizingMask 掩码属性设置为 UIViewAutoresizingFlexibleBottomMargin 以使 UILabel 将自身锚定在底部。这是假设您已经调整了 UITableViewCell 的大小以适应整个控件。否则,我认为处理此问题的最佳方法是重新计算标签的 y 坐标。

      【讨论】:

        【解决方案3】:

        我发现将这种行为作为一个类别添加到 UIView 上很有用,这样视图可以调整其子视图的大小以适应任意文本,并可以根据需要调整父视图的大小以适应新放大的子视图。

        http://blog.carbonfive.com/2009/07/10/resizing-uilabel-to-fit-text/

        【讨论】:

        • 谢谢。您如何处理随后出现的问题,即调整大小的标签会在其下方的标签上溢出?那么是否需要重新计算同一视图中每个标签的 y 坐标?
        • 如果您只调整单个子视图的大小,那么这应该不是问题,因为您可以使用弹簧将可调整大小的视图相对于其父视图的顶部定位,将所有其他子视图相对于底部定位,并随着标签/文本字段的增长调整父视图的大小。如果这是不可能的,那么是的,您需要在调整子视图大小后重新布局子视图。可能只需调用-layoutSubviews 即可,但这取决于您如何构建和管理您的视图,以及您是否正在为这种更改设置动画。
        猜你喜欢
        • 2014-03-24
        • 1970-01-01
        • 1970-01-01
        • 2019-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-29
        • 2023-03-07
        相关资源
        最近更新 更多