在 Swift 中前后发送标签...我必须这样做吗?

Posted

技术标签:

【中文标题】在 Swift 中前后发送标签...我必须这样做吗?【英文标题】:Send Labels forward and back in Swift... do I have to? 【发布时间】:2017-09-13 19:05:45 【问题描述】:

我希望 UILabel 在同一屏幕上的界面元素后面不断更新。通过使用 Swift Xcode 工具中的 Debug View Hierarchy 工具,我可以看到我的标签从其他元素下方开始。一旦我更新标签中的文本,它就会跳到顶部并覆盖我的其他标签和界面元素。

First Image 3D Debugger Image

第一个问题...我在 Interface Builder 中找不到设置前后层的工具...如果有人可以向我指出那将是很棒的,Google 不是我的朋友。

因为当我更新标签时它最终会在顶部,我想我可以在刷新标签时将标签发送到后面...在我的 ViewController.swift 文件中,在我更新标签文本的函数中,我试过了:(我的标签的出口挂钩叫做“consoleMe”

super.sendSubview(toBack:consoleMe)

不...可能是倒退了?所以我尝试了:

consoleMe.sendSubview(toBack: super)

...以及“自我”而不是超级。它根本不喜欢超级。它抱怨 self 是 ViewController 而不是 UIView。

最后,我想知道我是否必须这样做——肯定有一种方法可以指定 UILabel 应该保持在其他东西之下吗?

我是否正确更新 UILabel 会自动将其置于最前面(或者发生了其他事情?)我试图让其他标签和项目“不透明”,但当然没有效果,因为它们最终低于我的控制台标签。

谢谢! -D

【问题讨论】:

【参考方案1】:

sendSubview(toBack:)UIView 的一个方法,所有UIViewController 对象都包含一个内置的view

来自UIViewController 文档:

查看管理

每个视图控制器管理一个视图层次结构,其根视图存储在此类的view 属性中。

因此,请改为在 view 属性上调用 sendSubview(toBack:)

view.sendSubview(toBack: consoleMe)

【讨论】:

嗨!感谢您的回复。根据您所写的,我了解 sendSubview 是 UIView 可用的函数调用。我的第一个猜测更接近(ViewController 完成了工作,而不是 UILabel。)谢谢你!我不明白的是“所有 UIViewController 对象都包含一个内置的视图”。我知道我的程序正在创建 ViewController 类的一个实例,我们在其中做所有事情......“视图”这个词是指一个属性吗?还是另一个类的实例?我也很想知道是否有办法将控件或视图的图层与其他对象相关联。 @Beagley 是的viewUIViewController 的属性,当您创建自己的子类时,您可以访问view。我在答案中添加了更多细节。 @Beagley 关于与其他视图相关的固定视图,请查看 AutoLayout

以上是关于在 Swift 中前后发送标签...我必须这样做吗?的主要内容,如果未能解决你的问题,请参考以下文章

产品在购物车中时显示数量标签(Swift 5)

在发送电子邮件进行注册过程中出现异常时该怎么办

向特定端点发送推送通知

在 Swift 3 中单击标签栏项目时从底部打开弹出窗口?

带有Swift的多个自定义单元格的UITableview

Swift - 如何从 OneSignal SDK 向特定用户名标签发送发布通知?