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