美文网首页iOS随记
UIToolBar上直接使用addSubview添加控件,不可点

UIToolBar上直接使用addSubview添加控件,不可点

作者: 脚踏实地的小C | 来源:发表于2018-10-31 10:10 被阅读0次

      iOS 11后的系统,如果你直接在UIToolBar上使用addSubview的话,那么恭喜你中奖了,你会发现显示是可以显示,但是点击事件没了,这个时候你如果调试的话,你会发现,你添加的控件上会有一层view遮挡住了。究其根本原因,那是因为UIToolBar的层次结构变了,下面直接上图:

    iOS11之前.jpeg
    iOS11之后.jpeg
      看到这,你会觉得:老铁,赶紧上点干货吧,老板后面拿刀嚯嚯向开发了

      行吧,直接出解决方法,其实也就添加一句代码layoutIfNeeded,然后改变下在UIToolBar上添加控件的位置,千万要记住,给UIToolBar添加控件,一定得是在UIToolBar成为别的控件后,加上layoutIfNeeded之后才能在UIToolBar上添加控件。

    没有加layoutIfNeeded

       UIToolbar *toolBar = [UIToolbar new];
        toolBar.frame = CGRectMake(0, 100, 300, 40);
        toolBar.backgroundColor = [UIColor redColor];
        
        [self.view addSubview:toolBar];
        //[toolBar layoutIfNeeded];
        
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        btn.frame = CGRectMake(10, 0, 100, 40);
        btn.backgroundColor = [UIColor orangeColor];
        [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
        [toolBar addSubview:btn];
    

    层次结构是:


    这个时候,你会发现,你添加的控件是前有狼UIToolbarContentView后有虎UIBarBackground,被夹在中间了

    layoutIfNeeded之后

       UIToolbar *toolBar = [UIToolbar new];
        toolBar.frame = CGRectMake(0, 100, 300, 40);
        toolBar.backgroundColor = [UIColor redColor];
        
        [self.view addSubview:toolBar];
        [toolBar layoutIfNeeded];
        
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        btn.frame = CGRectMake(10, 0, 100, 40);
        btn.backgroundColor = [UIColor orangeColor];
        [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
        [toolBar addSubview:btn];
    

    层次结构是:


    有好的建议,欢迎交流,谢谢!!!

    相关文章

      网友评论

        本文标题:UIToolBar上直接使用addSubview添加控件,不可点

        本文链接:https://www.haomeiwen.com/subject/jayotqtx.html