Jac*_*ith 5 objective-c ios swift
为了不使用UICollectionViews创建类似于表格的电子表格,我决定使用嵌套的UIStackViews。
但是,由于我在UITableViewCell中使用它们并以编程方式创建它们,因此必须将其从单元格中删除,否则,当它重新绘制该单元格时,新视图将与旧视图重叠。
但是,从父视图中删除它们时,它会崩溃。如何正确删除嵌套的UIStackViews?
我的代码来创建嵌套的UIStackViews:
let table = UIStackView()
table.axis = .Vertical
table.spacing = 8
let json = JSON(data: jsonNew)
for i in 0..<json["Rows"].count{
let horizontal = UIStackView()
horizontal.axis = .Horizontal
horizontal.spacing = 8
for j in 0..<json["Rows"][i]["Column"].count{
let label = UILabel()
label.text = json["Rows"][i]["Column"][j].string!
label.lineBreakMode = .ByWordWrapping
label.numberOfLines = 0
label.font = label.font.fontWithSize(12)
horizontal.addArrangedSubview(label)
}
table.addArrangedSubview(horizontal)
}
Run Code Online (Sandbox Code Playgroud)
这就是我从单元格中删除所有视图的方式:
for myview in view.subviews{
myview.removeFromSuperview()
}
Run Code Online (Sandbox Code Playgroud)
这是错误:
2016-05-17 11:37:58.745 TestProject [678:26088] _UIConstraintBasedLayoutLog Unsatisfiable关闭2016-05-17 11:38:16.563 TestProject [678:26088] UISV-fill-proportionally.negError {id:13542} + <995:1,250:5.6875> * 0x12fd1b3f0:UISV-fill-proportionally.posErrorMarker {id:13541} + <250:4.6875> * 0x12fd1bd50:UISV-spacing。标记{id:13539} + <993:1,250:-5.6875> * 0x12fd1c370:UISV-fill-proportionally.negError {id:13549} + <993:1,250:5.6875> * 0x12fd1c370:UISV-fill-proportionally .posErrorMarker {id:13548} + <250:-1> * 0x12fd1e670:UISV-alignment.marker {id:13561} + <250:-1> * 0x12fd1e6c0:UISV-alignment.marker {id:13563} + <750 :0.00277778> * UILabel:0x12f884240'2016-04-11'.Width {id:13061} + <750:0.00277778> * UILabel:0x12fa2f410'2031839'.Width {id:13031} + <750:0.00277778> * UILabel: 0x12fa2fd90'OTOTAY?ÇVE DI?PAZ.A.?.'.Width{id:13037} + <750:0.00277778> * UILabel:0x12fa52010'TL'.Width {id:13055} + <750:0.00277778> * UILabel:0x12fafa3d0'MAHMUTÇET?NTÜRK'.Width{id:13043} + <750:0.00277778> * UILabel:0x12fafa6a0'15000,00'.Width {id:13049} + <760 :0> * UIStackView:0x12fa081c0.Width {id:13152} + <760:0,750:-0.00277778> * UIStackView:0x12fb2b740.Width {id:13067} + <760:0> * UIStackView:0x12fc44970.Width {id :13322} + <760:0> * UIStackView:0x12fc65df0.Width {id:13237}}:内部错误。为变量UILabel:0x12f905720'6955677'.Width {id:13371}设置空向量。* 13067} + <760:0> * UIStackView:0x12fc44970.Width {id:13322} + <760:0> * UIStackView:0x12fc65df0.Width {id:13237}}:内部错误。为变量UILabel:0x12f905720'6955677'.Width {id:13371}设置空向量。* 13067} + <760:0> * UIStackView:0x12fc44970.Width {id:13322} + <760:0> * UIStackView:0x12fc65df0.Width {id:13237}}:内部错误。为变量UILabel:0x12f905720'6955677'.Width {id:13371}设置空向量。* 第一掷调用堆栈:(0x18221ae38 0x18187ff80 0x18221ad80 0x182b52de0 0x182ccf4d4 0x182b4fcc8 0x182b53108 0x182b50d18 0x182b53928 0x182b585e4 0x182b4d010 0x182b4cd78 0x187464c80 0x187357368 0x187356c1c 0x182b4cd50 0x187356ac4 0x1876702c4 0x1873554e8 0x100143634 0x100148164 0x1876b2f40 0x1876b3120 0x1876b6a2c 0x1874a9500 0x1874a923c 0x1874a8ebc 0x187448aa0 0x1876a1a34 0x1876b7b74 0x1874487ac 0x1873580e4 0x184cfea28 0x184cf9634 0x184cf94f4 0x184cf8b24 0x184cf886c 0x184cf1dd8 0x1821d07b0 0x1821ce554 0x1821ce984 0x1820f8d10 0x1839e0088 0x1873c5f70 0x100107234 0x181c968b8)libc ++ abi.dylib:以NSException类型的未捕获异常终止
removeArrangedSubview您需要使用,即从 stackView 中删除视图
for myview in view.subviews{
table.removeArrangedSubview(myview)
myview.removeFromSuperview()
}
Run Code Online (Sandbox Code Playgroud)
UIStackView是一个非渲染UIView,在调用 时会自动将子视图添加到其视图层次结构中addArrangedSubview,因此您不需要调用addSubview. 当删除一个arrangedSubview时,你必须stackView.removeArrangedSubview(view)调用view.removeFromSuperview()
| 归档时间: |
|
| 查看次数: |
2203 次 |
| 最近记录: |