我有MainTableVC(UITableView
)和另一個嵌套SubTableVC(UITableView
)的MainVC(UIViewController
)。
他們都具有MainVC作爲delegate
和dataSource
,而且,每個人都有自己的restorationIdentifier
這樣我就可以當我打電話委託或數據源功能區分它們。在didSelectRowAtIndexPath中動畫NSLayoutConstraint不起作用
下面是一個例子:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch tableView.restorationIdentifier {
case "MainTableVCID":
return 10
case "SubTableVC":
return 5
default:
return 0
}
}
這是可以正常使用極大。但一個問題,我在這裏,我解決不了的是:
我已經一個UIPickerView那是MainVC的視圖的子視圖,它的約束只是MainVC的視圖下方有約束這樣的:
private let pickerView: UIPickerView = {
let picker = UIPickerView()
picker.backgroundColor = UIColor.lightGray
picker.translatesAutoresizingMaskIntoConstraints = false
return picker
}()
private var pickerViewBottomAnchor: NSLayoutConstraint?
override func viewDidLoad() {
super.viewDidLoad()
//other init code..
view.addSubview(pickerView)
pickerView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
pickerView.heightAnchor.constraint(equalToConstant: 180).isActive = true
pickerViewBottomAnchor = pickerView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 180)
pickerViewBottomAnchor?.isActive = true
pickerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
}
在嵌套tableView(SubTableVC),在tableView:didSelectRowAtIndexPath:
我想動畫的NSLayoutConstraint的常量等於零。
然而,在這個時候,我得到pickerViewBottomAnchor =零,當我使用控制檯打印對象(PO自我。pickerViewBottomAnchor?.constant)//prints nil
。
這是我使用的代碼:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if tableView.restorationIdentifier == "SubTableVC" {
pickerViewBottomAnchor?.constant = 180
self.view.layoutIfNeeded()
}
}
行編輯功能,只照着你可以發佈更多的代碼?從這裏你所呈現的沒有什麼是'零'的原因。此外底部常數= 180的選取器將超出界限。是你想要的嗎? – yerpy
@yerpy是的,我希望它是出界,並且當用戶點擊一個細胞,'didSelectItemAtIndexPath',我想底部常數= 0關於零的情況下,當我改變底部常數在任何其他函數在類中使用主表tableView,它不會返回nil。 – MEnnabah
創建'pickerView'的代碼在哪裏?你在設置'.translatesAutoresizingMaskIntoConstraints = false'嗎? – DonMag