11 个回答

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

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

设置 hidden 比较常见。

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

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

hiden更好

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

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

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

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

一般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的功能其实是可以相同的也许还有什么需要我们去探索吧!加油

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题