首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Swift中,如何在视图控制器中找到UILayoutGuide对象?

在Swift中,如何在视图控制器中找到UILayoutGuide对象?
EN

Stack Overflow用户
提问于 2016-10-02 06:49:35
回答 2查看 492关注 0票数 1

我正在创建一个sudoku风格的快速应用程序使用81个按钮(组织在堆栈视图)。

我使用它们的标记值0到80来引用按钮,这与我用来存储值的数组对齐。

但是,第一个按钮引起了问题,我认为是因为有一些UILayoutGuide对象也有标记0。

这个解决方案是可行的,但我刚刚升级到Xcode版本8.0 (8A218a),并转换成了swift 3。

我向视图控制器的viewDidLoad函数添加了以下代码:

代码语言:javascript
复制
// Get the subviews of the view
var subviews = view.subviews

// Return if there are no subviews
if subviews.count == 0 {
    return
}

for subview : AnyObject in subviews{

    // Do what you want to do with the subview
    print("\(subview.tag) - \(subview)")

}

这将产生以下日志:

可选(200)- UIImageView: 0x7ff3e240f3b0;帧= (-4 0;383 667);自动调整大小= RM+BM;userInteractionEnabled = NO;tag = 200;layer =可选(200)- UIStackView: 0x7ff3e240f590;帧=(7103;360);不透明= NO;自动调整大小= RM+BM;tag = 200;layer = CATransformLayer: 0x6100002316a0 可选(200)- UIImageView: 0x7ff3e24111b0;frame =(047;375 436);autoresize = RM+BM;userInteractionEnabled = NO;tag = 200;CALayer: 0x6100002344e0可选(200)- UIToolbar: 0x7ff3e2637ff0;frame =(0.623;375 44);不透明= NO;autoresize = RM+BM;tag = 200;layer = CALayer: 0x60000343e0可选(200)- UIImageView: 0x7ff3e26015f0;框架= (63 228;248 211);自调整大小= RM+BM;userInteractionEnabled = NO;tag = 200;layer :0x6000000e0 可选(200)- UILabel: 0x7ff3e263e0;帧= (117 313;141 41);文本=‘尼斯工作’;不透明= NO;自动调整大小= RM+BM;userInteractionEnabled = 200;tag = 200;layer = _UILabelLayer: 0x600000093060可选(200)- UIStackView: 0x7ff3e263e750;帧= (127 491;120);不透明= NO;自动调整大小= RM+BM;tag =200;layer = CATransformLayer: 0x600000035520 可选(0 )- _UILayoutGuide: 0x7ff3e263ee80;帧= ( 0;0);隐藏=是;层= CALayer: 0x600000035bc0可选(0)- _UILayoutGuide: 0x7ff3e263f030;帧=(0 0;0 0);隐藏=是;层= CALayer: 0x600000035c60

所以最后两个输出行是我怀疑的UILayoutGuide对象。我没有对它们进行编码,它们也不是层次结构中的对象。我如何看待他们/摆脱他们?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-04 15:18:09

简单的答案是UILayoutGuides没有标签。当您打印subview.tag时,当没有标记时,它的显示标记=0。因此,按钮0的问题与UILayoutGuide无关。

我不知道tag 0按钮有什么问题,但为了避免使用标记0,我对其进行了编码。不完全是固定的,但解决方案是有效的。

票数 0
EN

Stack Overflow用户

发布于 2016-10-02 08:28:10

如果只想防止循环添加_UILayoutGuide (属于UILayoutSupport类),请执行以下操作:

代码语言:javascript
复制
// Get the subviews of the view
var subviews = view.subviews

// Return if there are no subviews
if subviews.count == 0 {
    return
}

for subview : AnyObject in subviews{

    // Do what you want to do with the subview
    print("\(subview.tag) - \(subview)")

    // Check for whether is it a UILayout class or not
      if(subview is UILayoutSupport){
            //This section is executed when UILayoutGuide will come into play
            print("Don't add it to the stack")
       }else{ 
            // Write your code in this section
       }

}

您还可以打印您的堆栈,检查其中的UILayoutGuide并删除它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39814578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档