• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 更改一个 subview 的大小后如何触发自动布局?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 00:25:03 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在制作一个顶部有一个搜索栏的 View Controller 和一个填充 View 其余部分的表格 View 。

enter image description here

现在我需要可配置搜索栏的可见性。我正在做的事情是这样的:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    if (!(self.bShowSearchBar)) {
        [self.searchBar setHidden:YES];
        CGRect frameSearchBar = self.searchBar.frame;
        frameSearchBar.size.height = 0;
        [self.searchBar setFrame:frameSearchBar];
        NSLog(@"self.searchBar.frame: %@", NSStringFromCGRect(self.searchBar.frame));
        NSLog(@"self.tableView.frame: %@", NSStringFromCGRect(self.tableView.frame));
    }
}

当我隐藏搜索栏时,表格 View 的位置没有正确调整。 NSLog显示搜索栏的框架已经改变,而表格 View 的框架拒绝调整:

2017-03-27 15:37:41.204413 App[2071:954793] self.searchBar.frame: {{0, 0}, {375, 0}}
2017-03-27 15:37:41.204675 App[2071:954793] self.tableView.frame: {{0, 44}, {375, 623}}

但它只是没有正确显示。搜索栏的位置仍然保留。

enter image description here

我也试过

 (1) [self.tableView setNeedsLayout];
     [self.tableView layoutIfNeeded];

 (2) [self.view layoutSubviews];

在我将搜索栏高度设置为 0 之后,它们都不起作用。

那么在我修改了一个 subview 的大小后,如何重新触发自动布局呢?提前致谢。



Best Answer-推荐答案


您不能在 Autolayout 中更改 View 的框架。如果您打开 Autolayout 选项,它将不起作用。您应该改为更改约束。

从你的照片来看, enter image description here

按下控件并将此约束拖到您的 .m 文件中,使其成为属性。

当你想要做一些改变时,只需改变这个属性。

引用你的情况,在viewDidLoad中,你可以设置搜索栏的顶部等于-44,因为搜索栏的高度等于44,那么-44表示屏幕上方44点。通过这个改变,tableview 也将改变它的框架,因为它对搜索栏'bottom 的顶部约束等于 0。现在你隐藏了你的搜索栏并使 tableview 的框架正确。

关于ios - 更改一个 subview 的大小后如何触发自动布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43057193/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap