autoresizesSubviews导致frame不对

@property(nonatomic) BOOL autoresizesSubviews;
// default is YES. if set, subviews are adjusted according to their autoresizingMask if self.bounds changes

使用loadNibNamed创建了一个view,设置了它的frame,但最终显示出来的大小竟然不对。就一个地方设置了frame,打印前后的frame,都是正确的,没办法,使用KVO看看谁对它动了手脚。

[self.vSearch addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {

 NSLog(@"%@",[change objectForKey:NSKeyValueChangeOldKey]);
    NSLog(@"%@",[change objectForKey:NSKeyValueChangeNewKey]);
    //此处加入断点,以便查看栈的内容
}

结果显示,

_vHead.frame = CGRectMake(0, 0, w, y);

改变了self.vSearch的frame。而vHead是vSearch的superView。这就比较明了了,我也没加约束,so,autoresizes有问题。解决这个问题就很简单了,设置

self.vSearch.autoresizingMask = UIViewAutoresizingNone;

或者

_vHead.autoresizesSubviews = NO;

KVO+断点+栈信息解决这类问题不错。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容