gpt4 book ai didi

ios - 更改标签内容后更新带有标签的 UIView 框架

转载 作者:行者123 更新时间:2023-12-01 18:36:52 24 4
gpt4 key购买 nike

我有一个自定义 View ,其中包含一个标签(假设标签固定到 View 的所有边缘)。自定义 View 的宽度取决于 text 属性(当然,文本越长, View 就越长)。

然而,一个问题出现了。当我实例化 let customView = CustomView()然后为标签分配一个新文本,如 customView.textLabel.text "New text" ,自定义 View 的框架仍然为零。我想这是因为我一开始没有设置框架。

如果我决定在初始化时( let customView = CustomView(CGFrame(...)) )设置一个初始帧,然后更新标签内容,则该帧不会更改其 width .为什么?我怎样才能拥有一个动态 View ,使其框架适应其内容?调用sizeToFit在标签或 View 上不会改变框架。

最佳答案

How can I have a dynamic view that adapts its frame to its content?



通常的做法是使用自动布局定位 View 并覆盖 intrinsicContentSize根据内容 View (例如标签)提供宽度和高度。自动布局引擎将服从 intrinsicContentSize自动地。

请注意,内在内容大小不会神奇地知道它自己的依赖关系。由您决定调用 invalidateIntrinsicContentSize每当您更改依赖项(例如标签的文本)时, intrinsicContentSize再次调用以重新计算高度和宽度。

在这个例子中,CustomView 是红色 View ,里面的白色背景标签是它的 textLabel。 .请注意,随着标签文本的变化,红色 View 如何与标签的自动扩展和收缩同步自动扩展和收缩。

enter image description here

这是一个用于说明的非常简单的示例,因此我的 CustomView 实现非常简单:
class CustomView : UIView {
@IBOutlet var textLabel : UILabel!
override var intrinsicContentSize: CGSize {
let w = self.textLabel.intrinsicContentSize.width + 40
let h = self.textLabel.intrinsicContentSize.height + 40
return CGSize(width: w, height: h)
}
}

现在按钮只是说这样的事情:
    self.customView.textLabel.text = // whatever
self.customView.invalidateIntrinsicContentSize()

关于ios - 更改标签内容后更新带有标签的 UIView 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53899927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com