首页 > iOS开发隐藏一个View是直接设置hidden属性,还是将frame设置为0

iOS开发隐藏一个View是直接设置hidden属性,还是将frame设置为0

这两种方式,效果一样?我指的是性能方面


hidden了之后他还是要占据位置的,他的相关约束也都存在,看需求了


对于用户来说一样,不过还是系统的hiden比较靠谱。


一般情况下用hiden就好了,但如果有有约束需要改或者需要layoutsubview,还是移除或者改frame的好。


隐藏的话直接设置hidden就好啦,不然hidden这个名字直接翻译过来就是隐藏,不用干嘛呢~


我觉得这个你得自己看情况,用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的功能其实是可以相同的也许还有什么需要我们去探索吧!加油


如果有子视图还是用hidden或者removefromsuperview


一般hidden比较靠谱 因为你不用去更改原来的frame 当你需要再次显示的时候 直接修改属性就可以了。每次都更改frame 不仅慢 而且修改原来控件 。对于约束的情况 更改frame的话 可以不用重新约束 不然还得卸载constraint 。分情况看吧


设置 hidden 比较常见。


可以这样[self.xxx removeFromSuperview],看需求了


hiden更好


修改一个视图的frame,或者是将视图从父视图上移除会直接导致调用该视图的layoutSubviews方法,而且如果设置了contentMode为UIViewContentModeRedraw的话,也会导致调用drawRect方法。此时如果你自定义了这俩个方法来做一些绘制和布局工作,将会消耗CPU和GPU来做你的工作。

因此,如果仅仅是为了隐藏视图的话,直接使用hidden属性即可。

【热门文章】
【热门文章】