我正在创建一个sudoku风格的快速应用程序使用81个按钮(组织在堆栈视图)。
我使用它们的标记值0到80来引用按钮,这与我用来存储值的数组对齐。
但是,第一个按钮引起了问题,我认为是因为有一些UILayoutGuide对象也有标记0。
这个解决方案是可行的,但我刚刚升级到Xcode版本8.0 (8A218a),并转换成了swift 3。
我向视图控制器的viewDidLoad函数添加了以下代码:
// 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对象。我没有对它们进行编码,它们也不是层次结构中的对象。我如何看待他们/摆脱他们?
发布于 2016-10-04 15:18:09
简单的答案是UILayoutGuides没有标签。当您打印subview.tag时,当没有标记时,它的显示标记=0。因此,按钮0的问题与UILayoutGuide无关。
我不知道tag 0按钮有什么问题,但为了避免使用标记0,我对其进行了编码。不完全是固定的,但解决方案是有效的。
发布于 2016-10-02 08:28:10
如果只想防止循环添加_UILayoutGuide (属于UILayoutSupport类),请执行以下操作:
// 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并删除它。
https://stackoverflow.com/questions/39814578
复制相似问题