这两种方式,效果一样?我指的是性能方面
一般hidden比较靠谱 因为你不用去更改原来的frame 当你需要再次显示的时候 直接修改属性就可以了。每次都更改frame 不仅慢 而且修改原来控件 。对于约束的情况 更改frame的话 可以不用重新约束 不然还得卸载constraint 。分情况看吧
我觉得这个你得自己看情况,用Hidden确实很方便,但是今天我使用的时候发现并不好控制,不是逻辑不好控制,只是当你在父视图中添加一个view的时候,如果你之前添加了,那么就在下面,这样你肯定是不能去点击了,所以当我需要点击它上面视图的时候它能消失,可是它本身上面就有按钮,也需要事件响应,这样你根本点击不了上面,当然你可以让它成为第一层,这个虽然没尝试,但是可以知道,我使用frame就可以让它在上面,而实用hidden却是在下面,
这个情况是因为使用了一个BaseViewcontroller,(继承的ViewCointroller 并添加微UInavigationViewcontroller ,便于压栈),其他的视图都是继承它的,在BaseViewController 中的导航栏中的按钮中添加响应事件,当MoreBtn.hidden == NO 的时候,我就在viewWillAppear中创建MoreView,也就是这个view。OK , 我需要的是:当点击MoreBtn的时候点击一下就出现MoreView,再次点击需要MoreView消失,点击其它地方也是MoreView消失,刚开始以为很简单,使用touchBegin以为就可以了,但是实际上是需要点击在在父视图中的view才有响应,当前的viewController中除了导航栏以下都是一个tableView,不要以为你继承了BaseViewcontroller之后,你点击的任何地方它都会响应,你必须给tableView添加点击事件才有事件响应,对此我使用的Hidden的话就没法响应,只能设置frame。
本来是想来寻找区别的,刚看到题目,就来讨论了一下。
===========
不好意思 ,之前回答错了,应该不是frame的原因,后来发现是touch方法的原因,因为那个view也属于self.view,所以,touch方法中要它消失的时候,点击它自己也会消失,这样是不对滴,所以我就规定了它点击的范围使用的CGpoint,包含在导航栏范围的时候就消失,确实是很笨的方法,如果还有啥好方法,再研究,不好意思,看来hidden和frame的功能其实是可以相同的也许还有什么需要我们去探索吧!加油
5 回答2.8k 阅读
3 回答2.6k 阅读
2 回答1k 阅读
1 回答1.1k 阅读✓ 已解决
1 回答2.7k 阅读
3 回答963 阅读
1 回答1.5k 阅读
修改一个视图的frame,或者是将视图从父视图上移除会直接导致调用该视图的layoutSubviews方法,而且如果设置了contentMode为UIViewContentModeRedraw的话,也会导致调用drawRect方法。此时如果你自定义了这俩个方法来做一些绘制和布局工作,将会消耗CPU和GPU来做你的工作。
因此,如果仅仅是为了隐藏视图的话,直接使用hidden属性即可。