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

Posted

技术标签:

【中文标题】在 ios 13 中设置 bounds.height 不再起作用【英文标题】:setting bounds.height in ios 13 not working anymore 【发布时间】:2019-10-15 20:52:26 【问题描述】:

不幸的是,自从 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()

【问题讨论】:

【参考方案1】:

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

【讨论】:

酷。这有帮助:)【参考方案2】:

因为它是一个结构体。

这会起作用

myView.frame = Frame(....)

这不会

myView.bounds.height = someNumber

【讨论】:

嗨,克里斯,我试过 currentContainer?.frame = CGRect(origin: currentContainer?.frame.origin ?? scrollView.frame.origin, size: CGSize(width: 0, height: 0)) 但是这不会将高度更改为 0。我做错了吗? (框架没有被 ide 识别,好像它在 swift4 中消失了?)【参考方案3】:

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

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

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

一般来说,如果你不小心的话,故事板对于这样的事情来说是一场灾难。故事板往往给人一种成功的假象,而实际上约束是错误的。

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

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

【讨论】:

以上是关于在 ios 13 中设置 bounds.height 不再起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin Forms iOS 13+ 应用程序中设置导航栏按钮上的字体

在 Scenedelgate 中设置视图控制器后 Xcode 11.5 IOS 13.5 黑屏

我应该如何确定 UIKit 将打开哪个场景,以便我可以在正确的窗口中设置我的 UI? (iOS 13+)

iOS - 为啥在 initWithNibName 中设置和显示子视图不起作用?

iOS在H5中设置title

IOS/Objective-C:在呈现视图控制器中设置属性