masonry设置约束后如何获取正确的frame

纯代码实现自定义布局,我通常使用masonry框架和设置frame同时进行,然而masonry设置约束后并不能直接反应到frame上.

约束转frame需要时间,设置约束后直接使用frame结果全部为(0,0,0,0).比如:

- (void)setTableView {

UITableView *tableView = [[UITableView alloc] init];

tableView.frame = CGRectMake(0, CGRectGetMaxY(self.midView.frame), WSWIDTH, WSHEIGHT - CGRectGetMaxY(self.midView.frame) - 150 - 49 );

tableView.tableFooterView = [[UIView alloc] init];

tableView.delegate = self;

tableView.dataSource = self;

self.tableView = tableView;

[tableView registerNib:[UINib nibWithNibName:NSStringFromClass([WSSizeNumCell class]) bundle:nil] forCellReuseIdentifier:joinGoodsTrainsId];

[self.contentV addSubview:tableView];

}

这里想利用之前用masonry约束好的midView的frame设置tableView的位置,但是这里self.midView.frame仍然为(0,0,0,0)

要想获取到正确的frame,要利用到layoutIfNeeded

layoutIfNeeded:告知页面需要立即更新,如果希望立即生成新的frame需要调用此方法.

如下:

- (void)setTableView {

[self.view layoutIfNeeded];

UITableView *tableView = [[UITableView alloc] init];

tableView.frame = CGRectMake(0, CGRectGetMaxY(self.midView.frame), WSWIDTH, WSHEIGHT - CGRectGetMaxY(self.midView.frame) - 150 - 49 );

tableView.tableFooterView = [[UIView alloc] init];

tableView.delegate = self;

tableView.dataSource = self;

self.tableView = tableView;

[tableView registerNib:[UINib nibWithNibName:NSStringFromClass([WSSizeNumCell class]) bundle:nil] forCellReuseIdentifier:joinGoodsTrainsId];

[self.contentV addSubview:tableView];

}

这个时候获取frame就是正确的.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 纯代码实现自定义布局,我通常使用masonry和设置frame同时进行,然而masonry设置约束后并不能直接反应...
    Mickey_陈阅读 3,277评论 0 0
  • iOS_autoLayout_Masonry 概述 Masonry是一个轻量级的布局框架与更好的包装AutoLay...
    指尖的跳动阅读 1,210评论 1 4
  • 1、禁止手机睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa阅读 1,150评论 1 6
  • 概述在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似...
    liudhkk阅读 9,098评论 3 38
  • 一、手足情之考验 李邪、王孬,出同行,入同坐。结为异姓兄弟,比一奶所吊的兄弟还亲。 一天,他们在麦田挖沟排渍。焦阳...
    ZHANG顽石点头阅读 338评论 0 1