在ios 13中设置bounds.height不再起作用

时间:2019-10-15 20:52:26

标签: ios swift ios13

不幸的是,由于iOS更新到13,我的应用程序表现不佳。 容器的高度由UISegmentControl元素控制。 挂钩正常工作,并设置了正确的索引。 有3个子容器:

  • profileDataContainerView
  • addValueContainerView
  • checkInHistoryContainerView

不幸的是,主滚动视图内的容器不会改变其高度。 有人知道这个问题的解决方案吗?

@IBAction func showComponent(_ sender: UISegmentedControl) {
    showComponent(index: sender.selectedSegmentIndex)
}

private func showComponent(index: Int) {
    currentContainer?.bounds.size.height = 0
    currentSegmentedControllerIndex = index
    switch index {
    case 0:
        profileDataContainerView.bounds.size.height = 308
        currentContainer = profileDataContainerView
    case 1:
        addValueContainerView.bounds.size.height = 294
        currentContainer = addValueContainerView
    case 2:
        if let tableView = checkInHistoryContainerView.subviews.last as? UITableView {
            checkInHistoryContainerView.bounds.size.height = tableView.contentSize.height
        }
        currentContainer = checkInHistoryContainerView
    default:
        break
    }
    updateContentHeight()
}

How it looks in the storyboard

3 个答案:

答案 0 :(得分:0)

因为它是一个结构。

这将起作用

myView.frame = Frame(....)

这不会

myView.bounds.height = someNumber

答案 1 :(得分:0)

很难确定为什么您的应用程序不能仅使用提供的代码工作,但是您可以记住一些事情。

  1. 滚动视图的大小会根据其内容自动调整。尝试调整滚动视图本身,请参见以下链接:how to set scrollview content size in swift 3.0

  2. 调整内容大小,然后再重新加载视图。设置新大小后,请尝试确保您的应用正在加载所有视图。该链接可以帮助您更改框架尺寸:Change frame programmatically with auto layout

总的来说,如果不小心,情节提要对于这样的事情是一场灾难。实际上,如果约束条件错误,情节提要往往会给人以成功的幻想。

要检查的最后一件事(我在代码中发现的一个错误)是:segue已经发生了很大的变化,因此请确保您的segue是正确的类型,并且以您想要的方式呈现。这是有关iOS 13中一些主要更改的链接: https://medium.com/@hacknicity/view-controller-presentation-changes-in-ios-13-ac8c901ebc4e

编辑:克里斯回答说您使用的是结构,如果是这种情况,那么它们是正确的,因为您没有正确更改值。

答案 2 :(得分:0)

您可以使用yourview.layer.bounds代替yourview.bounds。