我正在尝试使用段控制器在我的tableView和容器视图之间切换,但是当我尝试在它们之间切换时,它只有一半可以工作。 TableView出现并消失,但容器视图永远不会出现。
这是我的代码:
@IBAction func switchAction(_ sender: UISegmentedControl) {
if sender.selectedSegmentIndex == 0 {
profileTableView.isHidden = false
modelsContainerView.isHidden = true
} else {
profileTableView.isHidden = true
modelsContainerView.isHidden = false
}
}
更新
如果我使用此代码,模拟类型的工作。出现容器视图,但它不像tableview那样填满屏幕。
@IBAction func switchAction(_ sender: UISegmentedControl) {
if sender.selectedSegmentIndex == 0 {
UIView.animate(withDuration: 0.5, animations: {
self.profileTableView.alpha = 1
self.modelsContainerView.alpha = 0
})
} else {
UIView.animate(withDuration: 0.5, animations: {
self.profileTableView.alpha = 0
self.modelsContainerView.alpha = 1
})
}
}
我可以告诉它不起作用,因为我已将容器视图的背景颜色设置为粉红色。当我尝试从TableView(可以工作)切换到容器视图时,这就是它的样子:
所有插座似乎都已连接。我的UI设置是段控制器后面的绿色视图,下面有一个tableView,并且在同一个地方有一个containerView。
非常感谢您的高级帮助。
答案 0 :(得分:2)
尝试这种方法......
Seg背景视图高度为45点,顶部固定,前导,尾随全部等于0
。
配置文件容器固定为前导,尾随,底部均等于0
,顶部固定在Seg背景的底部。
但你看不到Profile Container(红色背景),因为模型容器(橙色背景)位于它之上,并且......
模型容器的宽度和高度相等,并且水平和垂直居中,均为Profile Container。
Profile Container中嵌入了Profile Table VC。
模型容器中嵌入了模型VC。
这个想法是:
选择Seg 0
时,个人资料容器为alpha 1且不隐藏,而Models Container为alpha 0且 隐藏。
选择Seg 1
时,个人资料容器为alpha 0且 隐藏,而Models Container为alpha 1且不隐藏。
class SegContainerViewController: UIViewController {
@IBOutlet weak var profileContainerView: UIView!
@IBOutlet weak var modelsContainerView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// start with Profile visible
// so hide Models and set its alphs to 0
self.modelsContainerView.alpha = 0
self.modelsContainerView.isHidden = true
}
@IBAction func switchAction(_ sender: UISegmentedControl) {
// on segment select, the "other" container will be
// transparent and hidden, so
// un-hide it, then animate the alpha for both (for cross-fade)
// on animation completion, hide the now transparent container
if sender.selectedSegmentIndex == 0 {
self.profileContainerView.isHidden = false
UIView.animate(withDuration: 0.5, animations: {
self.profileContainerView.alpha = 1
self.modelsContainerView.alpha = 0
}, completion: { (finished: Bool) in
self.modelsContainerView.isHidden = true
})
} else {
self.modelsContainerView.isHidden = false
UIView.animate(withDuration: 0.5, animations: {
self.profileContainerView.alpha = 0
self.modelsContainerView.alpha = 1
}, completion: { (finished: Bool) in
self.profileContainerView.isHidden = true
})
}
}
}
修改强>
要访问嵌入式视图控制器,请覆盖prepareForSegue:
var theProfileVC: ProfileTableViewController?
var theModelsVC: ModelsViewControler?
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? ProfileTableViewController {
// do something here if desired, like setting a property of the VC
// save a reference so we can use it later
theProfileVC = vc
}
if let vc = segue.destination as? ModelsViewControler {
// do something here if desired, like setting a property of the VC
// save a reference so we can use it later
theModelsVC = vc
}
}
我还用一个例子更新了GitHub回购。
如果你想深入研究它,我把它作为一个示例项目:https://github.com/DonMag/SegmentsAndContainers