iOS随记

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

2018-10-31  本文已影响0人  脚踏实地的小C

  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];

层次结构是:


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

上一篇 下一篇

猜你喜欢

热点阅读