Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用自动布局将UISearchController的搜索栏添加为视图的子视图_Ios_Autolayout - Fatal编程技术网

Ios 使用自动布局将UISearchController的搜索栏添加为视图的子视图

Ios 使用自动布局将UISearchController的搜索栏添加为视图的子视图,ios,autolayout,Ios,Autolayout,我有一个视图控制器类,在其xib中添加了3个实体:容器视图、搜索栏容器视图和按钮。我已经使用故事板上的自动布局约束将搜索栏容器和按钮安排在控制器视图的顶部。它们一起横跨视图的整个宽度,占据的高度等于44px。它们下面是容器视图,其顶部与搜索栏容器视图的底部对齐。以下是viewDidLoad和其他相关方法: - (void)viewDidLoad { [super viewDidLoad]; [self addTableView]; self.searchControl

我有一个视图控制器类,在其xib中添加了3个实体:容器视图、搜索栏容器视图和按钮。我已经使用故事板上的自动布局约束将搜索栏容器和按钮安排在控制器视图的顶部。它们一起横跨视图的整个宽度,占据的高度等于44px。它们下面是容器视图,其顶部与搜索栏容器视图的底部对齐。以下是viewDidLoad和其他相关方法:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self addTableView];

    self.searchControllerInternal = [[UISearchController alloc] initWithSearchResultsController:nil];

    self.searchControllerInternal.delegate = self;
    self.searchControllerInternal.searchResultsUpdater = self;
    self.searchControllerInternal.dimsBackgroundDuringPresentation = NO;
    self.searchControllerInternal.searchBar.delegate = self;

    [self addSearchControllerSearchBarToView];

}

    -(void)addSearchControllerSearchBarToView
    {
        UISearchBar *pSearchBar = self.searchControllerInternal.searchBar;

        self.searchBarContainerView.translatesAutoresizingMaskIntoConstraints = NO;

        [self.searchBarContainerView addSubview:pSearchBar];

        pSearchBar.translatesAutoresizingMaskIntoConstraints = NO;

        [self addSearchBarConstraints];
    }

-(void)addSearchBarConstraints
{
    UISearchBar *pSearchBar = self.searchControllerInternal.searchBar;

    {
        NSLayoutConstraint *pConstraint = [NSLayoutConstraint constraintWithItem:pSearchBar attribute:NSLayoutAttributeTop
                                                                       relatedBy:NSLayoutRelationEqual toItem:self.searchBarContainerView
                                                                       attribute:NSLayoutAttributeTop
                                                                      multiplier:1
                                                                        constant:0];

        [self.searchBarContainerView addConstraint:pConstraint];

        self.searchBarTopConstraint = pConstraint;
    }

    {
        NSLayoutConstraint *pLeadingConstraint = [NSLayoutConstraint constraintWithItem:pSearchBar
                                                                              attribute:NSLayoutAttributeLeft
                                                                              relatedBy:NSLayoutRelationEqual
                                                                                 toItem:self.searchBarContainerView
                                                                              attribute:NSLayoutAttributeLeft
                                                                             multiplier:1
                                                                               constant:0];

        [self.searchBarContainerView addConstraint:pLeadingConstraint];
    }

    {
        NSLayoutConstraint *pTrailingConstraint = [NSLayoutConstraint constraintWithItem:pSearchBar
                                                                               attribute:NSLayoutAttributeRight
                                                                               relatedBy:NSLayoutRelationEqual
                                                                                  toItem:self.searchBarContainerView
                                                                               attribute:NSLayoutAttributeRight
                                                                              multiplier:1
                                                                                constant:0];

        [self.searchBarContainerView addConstraint:pTrailingConstraint];
    }

    {
        NSLayoutConstraint *pBottomConstraint = [NSLayoutConstraint constraintWithItem:pSearchBar
                                                                               attribute:NSLayoutAttributeBottom
                                                                               relatedBy:NSLayoutRelationEqual
                                                                                  toItem:self.searchBarContainerView
                                                                               attribute:NSLayoutAttributeBottom
                                                                              multiplier:1
                                                                                constant:0];

        [self.searchBarContainerView addConstraint:pBottomConstraint];
    }


}

视图加载正确。但是,单击搜索栏时,搜索栏将移出其容器视图。搜索栏容器视图位于状态栏的正下方,搜索栏也应位于该位置,但它实际上已移出可见区域。为什么会这样?此外,如果dimsBackgroundDuringPresentation设置为TRUE,则如果用户在搜索处于活动状态时点击屏幕上的任何位置,并表示“视图层次结构未为约束做好准备”,则应用程序将崩溃。

您可能要创建自己的
UISearchBar
,不要将
UISearchController
的搜索栏添加为视图的子视图。我可以这样做。但我如何将其与搜索控制器关联?我正在使用UISearchController附带的委托方法