【问题标题】:hidesbarsonswipe mutates view sizehidesbarsonswipe 改变视图大小
【发布时间】:2017-11-28 19:32:53
【问题描述】:

这段代码有问题:

navigationController?.hidesBarsOnSwipe = true

我的导航控制器的根视图控制器是一个 UICollectionViewController。下面的蓝色视图是代表用户当前屏幕的单元格。我认为问题在于导航栏隐藏时我需要调整单元格的大小。

我这样设置单元格大小:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: view.frame.width, height: view.frame.height - 44)
}

我没有打破任何限制,我非常确定一切都已正确设置。但是当我向上滑动时,会发生这种情况:

之前

之后

如您所见,视图被缩短了。我在代码中的任何地方都找不到这些测量值。

有没有办法确保正确调整视图大小?

【问题讨论】:

  • 视图没有缩短。当导航栏消失时,它正在向上移动以填充左侧的孔。你知道如何改变视图的大小吗?如果您需要其他帮助,请显示您的代码。但也许这足以让你走上正轨......
  • 您是说我需要手动调整视图大小吗?看起来应用程序应该自己解决这个问题。
  • @Mozahler 我认为问题在于我正在使用集合视图控制器,其中每个单元格都充当整个屏幕的视图。导航控制器检测到滚动,但不改变单元格的大小。有没有办法跟踪导航栏的这种隐藏,以便我可以更改单元格的大小?
  • 如果你这样配置它就可以了。你绝对可以在 IB 中解决这个问题。我通常在 viewDidLoad 中以编程方式执行此操作,我已经为您提供了足够的信息来修复它。如果你想不通,我可以告诉你怎么做。但不是今天早上。我今天下午去看看你的情况如何。
  • @Mozahler 是的,我的项目不使用 IB。如果我添加上面关于结构的评论,包括一些代码,你能在答案中提供这个编程方法吗?

标签: ios swift3 uinavigationcontroller


【解决方案1】:

把它放在你的 viewDidLoad() 中,你应该很高兴。

    self.edgesForExtendedLayout = []
    yourBlueView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(yourBlueView)
    yourBlueView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    yourBlueView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    yourBlueView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    yourBlueView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

编辑: 将 yourBlueView 更改为您为该特定 UIView 指定的名称。如果您遇到困难,请告诉我,但请先尝试弄清楚。这是学习和保留它的最佳方式。

底部的栏至少需要 44,我注意到它位于顶部的导航栏下方。删除你的硬代码大小太高,只使用自动布局

第二次编辑:(这是一种非自动布局的方法)

let reuseIdentifier = "Cell"

这段代码进入viewDidLoad:

// Do any additional setup after loading the view, typically from a nib.
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
layout.sectionInset = UIEdgeInsets(top: 20, left: 10, bottom: 10, right: 10)
let displaySize =  UIScreen.main.bounds
let displayHeight = displaySize.height - 40
let displayWidth = displaySize.width

layout.itemSize = CGSize(width: displayWidth, height: displayHeight)
if let collectionView = UICollectionView(frame: self.view.bounds, collectionViewLayout: layout) {
    collectionView.dataSource = self
    collectionView.delegate = self

    collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
    collectionView.backgroundColor = UIColor.white
    self.view.addSubview(collectionView!)
}

【讨论】:

  • 好吧,我卡住了。我真的试过了。我为领先的主播尝试了这个:collectionView?.leadingAnchor.constraint(equalTo: (navigationController?.topViewController?.view.leadingAnchor)!).isActive = true
  • 我确认导航控制器有一个顶视图控制器。另外,上面的评论不可能是正确的,因为我两次引用了同一个视图。我才意识到这一点
  • 该代码有效,但单元格的高度保持不变。
  • 是的,您在我编写该代码后添加了关键信息。我回家后看看你添加的信息。请说明您是如何设置单元格大小的,这并不难。
  • 抱歉,添加了该信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-10
  • 1970-01-01
相关资源
最近更新 更多