自动布局不起作用?

Posted

技术标签:

【中文标题】自动布局不起作用?【英文标题】:Auto Layout not working? 【发布时间】:2013-02-26 19:41:07 【问题描述】:

我在使用自动布局设置的表格视图顶部有一个搜索栏,如下所示:

_searchBar.translatesAutoresizingMaskIntoConstraints = NO;
_tableView.translatesAutoresizingMaskIntoConstraints = NO;

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_searchBar]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_searchBar)]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_tableView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tableView)]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_searchBar][_tableView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_searchBar, _tableView)]];

当我运行它时,一切看起来都很好。但是当我在开始编辑搜索栏之前执行_searchBar.showsScopeBar = YES; 时,搜索栏和表格视图不会自动调整大小。即使我这样做[_searchBar sizeToFit],表格视图也不会调整大小并向下移动。为什么??

注意:我没有将搜索栏作为表格视图的标题;它只是一个父视图和两个子视图。 注2:我在调用_searchBar.showsScopeBar = YES;之前和之后检查了_searchBarintrinsicContentSize,大小确实发生了变化。

【问题讨论】:

【参考方案1】:

你必须invalidateIntrinsicContentSize:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar

    searchBar.showsScopeBar = YES;
    [searchBar invalidateIntrinsicContentSize];
    [searchBar setShowsCancelButton:YES animated:YES];


- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar

    searchBar.showsScopeBar = NO;
    [searchBar invalidateIntrinsicContentSize];
    [searchBar setShowsCancelButton:NO animated:YES];

见UISearchBar's scope button won't show up ios6

【讨论】:

所以这是苹果的错误,对吧?顺便说一句,那些sizeToFits 是不需要的。 @fumoboy007 关于那些sizeToFit 引用,你说得对,这些是不需要的,我已经删除了它们。谢谢。

以上是关于自动布局不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

自动布局不起作用

为啥这个 UIScrollView 自动布局不起作用?

UIView addSubview 自动布局不起作用

自动布局上的 UILabel sizeWithFont 不起作用

自动布局:缩放填充不起作用

使用 UILabel 以编程方式自动布局不起作用