【问题标题】:UISplitViewController - doubleColumn Style not workingUISplitViewController - 双列样式不起作用
【发布时间】:2021-09-12 10:18:25
【问题描述】:

在我的应用程序中,我正在使用这样的 UISplitViewController:

let splitViewController = UISplitViewController()
splitViewController.preferredDisplayMode = .oneBesideSecondary
splitViewController.viewControllers = [
    UINavigationController(rootViewController: CalendarViewController()),
    DetailViewController()
]

结果:

但是当我像这样将样式设置为doubleColumn 时:

let splitViewController = UISplitViewController(style: .doubleColumn)

结果如下所示:

我不明白为什么现在 CalendarViewController 比主视图更宽。我想使用侧边栏,以便用户可以显示和隐藏日历。

如何解决此显示错误,以使 CalendarViewController 具有与主视图相同的宽度?

【问题讨论】:

    标签: swift uisplitviewcontroller calendarkit


    【解决方案1】:

    这是 CalendarKit 库中的一个错误,已在以下提交中修复:Fix Layout Issue when using UISplitViewController

    问题出在没有考虑safeArea指南的布局代码中:

          dayHeaderView.frame = CGRect(origin: CGPoint(x: 0, y: layoutMargins.top),
                                       size: CGSize(width: bounds.width, height: headerHeight))
          let timelinePagerHeight = bounds.height - dayHeaderView.frame.maxY
          timelinePagerView.frame = CGRect(origin: CGPoint(x: 0, y: dayHeaderView.frame.maxY),
                                           size: CGSize(width: bounds.width, height: timelinePagerHeight))
    

    切换到 AutoLayout 后,问题就消失了:

          dayHeaderView.translatesAutoresizingMaskIntoConstraints = false
          timelinePagerView.translatesAutoresizingMaskIntoConstraints = false
    
          dayHeaderView.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor).isActive = true
          dayHeaderView.trailingAnchor.constraint(equalTo: safeAreaLayoutGuide.trailingAnchor).isActive = true
          dayHeaderView.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor).isActive = true
          let heightConstraint = dayHeaderView.heightAnchor.constraint(equalToConstant: headerHeight)
          heightConstraint.priority = .defaultLow
          heightConstraint.isActive = true
    
          timelinePagerView.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor).isActive = true
          timelinePagerView.trailingAnchor.constraint(equalTo: safeAreaLayoutGuide.trailingAnchor).isActive = true
          timelinePagerView.topAnchor.constraint(equalTo: dayHeaderView.bottomAnchor).isActive = true
          timelinePagerView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
    

    【讨论】:

      猜你喜欢
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 2014-06-05
      • 2018-11-01
      • 2018-11-22
      相关资源
      最近更新 更多