根据其上方视图“元素”的宽度/高度“动态”生成子视图框架的 x 和 y 值?

Posted

技术标签:

【中文标题】根据其上方视图“元素”的宽度/高度“动态”生成子视图框架的 x 和 y 值?【英文标题】:"Dynamically" generated x and y values of a subview's frame depending on the width/height of a view "element" above it? 【发布时间】:2012-06-03 11:14:43 【问题描述】:

有没有办法根据其上方的另一个子视图的宽度和高度来设置子视图框架的 x 和 y 值?换句话说,举个例子,假设一个 UIView 有两个子视图,一个 UILabel 和一个 UIImage,标签的内容将来可能会发生变化并占用更多空间(两三个“行”而不是一个) - 什么我是否必须根据该标签中使用的字符数使该图像显示得略低?是否有简单使用 UIWebView 的替代方法?

提前感谢您的任何建议。

【问题讨论】:

您在设置此视图的 x 和 y 时遇到什么问题? 【参考方案1】:

您可以尝试使用 UITextView 来标记您的 UIImage。在 UITextView 委托 (UITextViewDelegate) 中有一个委托方法 - (void)textViewDidChange:(UITextView *)textView。这会在文本视图更改时触发,因此您可以检查文本视图中的内容大小,并在必要时移动图像。

您可以实现它来检查 textview.contentSize.height + y 坐标是否大于 UIImage y 坐标,如果是,则将 UIImage 移动到 y 坐标的新偏移量。与 textview.contentSize.width + X 坐标和 UIIMage x 坐标相同。

【讨论】:

【参考方案2】:

视图不应真正设置自己的框架 x 和 y,因为正如您所描述的,适当的值取决于各个视图不知道的上下文。

您想在包含视图中实现layoutSubviews 以适当地调整标签和图像视图的大小和位置。然后,当您检测到标签的大小已更改时,您可以在包含视图上调用setNeedsLayout。这将告诉 UIKit 包含视图的子视图需要重新调整大小和定位,并且您的 layoutSubviews 实现将在适当的时间被调用。

【讨论】:

以上是关于根据其上方视图“元素”的宽度/高度“动态”生成子视图框架的 x 和 y 值?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据swift 4或5中的图像大小使图像视图高度和宽度(纵横比)动态? [关闭]

视图如何在不使用依赖于框架的 intrinsicContentSize 的情况下根据其宽度的函数确定其高度?

将动态高度设置为 UIScrollView Swift

如何根据 <div> 元素的高度或宽度更改其颜色?

具有比例宽度和文本驱动高度的动态 UILabel

GeometryReader 计算视图的总高度