首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS11 UIToolBar内容视图

iOS11 UIToolBar内容视图
EN

Stack Overflow用户
提问于 2017-09-08 02:13:56
回答 6查看 5.9K关注 0票数 34

iOS 11中,按钮和文本字段作为UIToolBar的子视图没有响应。将视图层次结构与iOS 10进行比较,我们可以看到在UIToolBar的所有子视图上都有一个_UIToolBarContentView

例如,这个UIToolBar的新布局破坏了slacktextviewcontroller https://github.com/slackhq/SlackTextViewController/issues/604

需要一个在iOS 10/11中工作的解决方案。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-09-27 13:08:15

为了解决iOS11 (兼容较低版本)的问题,您只需要在将layoutSubview作为子视图添加到UI层次结构之后立即生成UIToolBar

在这种情况下,_UIToolbarContentView会降低到UIToolBar的第一个子视图,并且可以像以前一样将所有子视图添加到更高的位置。

例如在ObjC中,

代码语言:javascript
复制
    UIToolbar *toolbar = [UIToolbar new];
    [self addSubview: toolbar];
    [toolbar layoutIfNeeded];

    <here one can add all subviews needed>

同样的问题也发生在松弛文本视图控制器上。

票数 35
EN

Stack Overflow用户

发布于 2017-10-25 03:04:30

我在我的案子中解决了这个问题。我在layoutSubviews的子类中重写了UIToobar方法,并将userInteractionEnable of _UIToolbarContentView转换为NO。

代码语言:javascript
复制
- (void)layoutSubviews {
    [super layoutSubviews];


    NSArray *subViewArray = [self subviews];

    for (id view in subViewArray) {
        if ([view isKindOfClass:(NSClassFromString(@"_UIToolbarContentView"))]) {
            UIView *testView = view;
            testView.userInteractionEnabled = NO;
         }
     }

}
票数 3
EN

Stack Overflow用户

发布于 2017-10-03 13:59:46

您可以只使用hitTest(_:with:)方法。

  1. 首先,在contentView中创建一个属性UIToolbar: 打开私有(Set) var contentView: UIView = UIView()
  2. 然后,让contentView的框架与UIToolbar的相同。例如: contentView.frame =界contentView.autoresizingMask = .flexibleWidth,.flexibleHeight addSubview(contentView)
  3. 最后,重写hitTest(_:with:)方法: 打开覆盖函数hitTest(_ point: CGPoint,with event: UIEvent?) -> UIView?{ if self.point(内部: point,with: event) { if = contentView.hitTest(point,with: event) {返回hitTestView }if{返回自}或{ return }}

在这种情况下,如果您想通过简单地添加其他视图来自定义工具栏,则应该将它们添加到contentView中,以便将它们正确定位。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46107640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档