我想完全隐藏视图。我是ios的新手。但我在android方面有很棒的工作经验。
所以在android中我们可以设置可见性消失。它完全从布局中删除了视图。我想在IOS中做同样的事情。这是布局/设计实例
查看1 查看2(这是我要隐藏和显示的那个) 查看3
现在,当我想要隐藏视图2时,我希望视图2的空间也从屏幕消失,视图1和视图3必须粘在一起。当视图2设置为可见时,它必须按顺序显示。即查看1,2,3
现在我正在做的是设置 view2.ishidden = true ,但它不按我想要的方式工作。
请告诉我什么相当于IOS中android的view.gone。 ???
答案 0 :(得分:2)
有几种方法可以实现这一目标,但您在这里缺少的是关于如何设置布局的一些关键信息。
我将假设你所拥有的3个视图是垂直对齐的,彼此相邻并具有相等的宽度。
我们从横向角度以编程方式看待这一点:
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://www.fairprice.com.sg/searchterm/apple');
foreach ($crawler->filter('a.pdt_title') as $node) {
print $node->nodeValue."\n";
}
当第二个被跳过时,我们可能只需停用let firstLeading = NSLayoutConstraint(item: view1, attribute: .leading, relatedBy: .equal, toItem: parent, attribute: .leading, multiplier: 1.0, constant: 0.0)
let betweenSecondAndFirst = NSLayoutConstraint(item: view2, attribute: .leading, relatedBy: .equal, toItem: view1, attribute: .trailing, multiplier: 1.0, constant: 0.0)
let secondEqualWidth = NSLayoutConstraint(item: view2, attribute: .width, relatedBy: .equal, toItem: view1, attribute: .width, multiplier: 1.0, constant: 0.0)
let betweenThirdAndSecond = NSLayoutConstraint(item: view3, attribute: .leading, relatedBy: .equal, toItem: view2, attribute: .trailing, multiplier: 1.0, constant: 0.0)
let lastEqualWidth = NSLayoutConstraint(item: view3, attribute: .width, relatedBy: .equal, toItem: view1, attribute: .width, multiplier: 1.0, constant: 0.0) // Note to view1 to make things easier
let lastTrailing = NSLayoutConstraint(item: view3, attribute: .trailing, relatedBy: .equal, toItem: parent, attribute: .trailing, multiplier: 1.0, constant: 0.0)
并将betweenThirdAndSecond
添加为:
betweenThirdAndFirst
您可以使用约束属性来启用或禁用它们。或者您可以简单地使用优先级并将其切换为例如900到100.您可以在故事板中实际设置所有这些约束,然后将2作为插件拖到代码中。然后只需:
let betweenThirdAndFirst = NSLayoutConstraint(item: view3, attribute: .leading, relatedBy: .equal, toItem: view1, attribute: .trailing, multiplier: 1.0, constant: 0.0)
这种方式可能是您可以控制的最佳方式(主要是动画)。但是你也可以使用func setMiddleViewShown(_ shown: Bool) {
UIView.animate(withDuration: 0.3) {
self.betweenThirdAndSecond.priority = UILayoutPriority(rawValue: shown ? 900.0 : 100.0)
self.betweenThirdAndFirst.priority = UILayoutPriority(rawValue: shown ? 100.0 : 900.0)
self.view2.alpha = shown ? 1.0 : 0.0
parent.layoutIfNeeded() // parent is most likely "self.view"
}
}
方法来插入或删除视图。 UIStackView
应该也可以。或者您知道..只需以编程方式完成所有操作,忽略约束并为每个视图设置UICollectionView
。
我在使用frame
时可以考虑的最小值如下,并且有效:
UIStackView