ios - 使用分段 Controller 重叠 UIView 问题

标签 ios swift uiview uiscrollview

我有一个分段 Controller ,它在屏幕上调用两个 UIViews xib。每个 View 的长度会因内容而异。由于每个 View 的内容不同。 UIView 设置在 ScrollView 中。

当使用分段 Controller 选择 Selected UIView 时,我将其拉到其他 UIView 的前面。 问题是当我向下滚动时,较长的 View 仍然可见。我无法弄清楚如何只让滚动条向下滚动到已被拉到前面的 UIView 的底部。

我在 tabselected 函数中使用 simpleViewX.isHiddensimpleViewY.isHidden 但这并没有真正解决问题,因为我仍然可以向下滚动到空白空间。

class foodinfo: UIViewController {

var counter = Int()

@IBOutlet var tabs: UISegmentedControl!
@IBOutlet var shiftView: UIView!
@IBOutlet var theTitleLable: UILabel!

var simpleViewX: UIView!
var simpleViewY: UIView!

var theTitleArray = ["Title1","Title2","Title3","Title4","Title5","Title6","Title7"]

override func viewDidLoad() {

    //Different subViews for each selection
    if counter == 0 {
        simpleViewX = SimpleVC0().view
        simpleViewY = SimpleVC1().view
        shiftView.addSubview(simpleViewY)
        shiftView.addSubview(simpleViewX)
    }

    if counter == 1 {
        simpleViewX = SimpleVC2().view
        simpleViewY = SimpleVC3().view
        shiftView.addSubview(simpleViewY)
        shiftView.addSubview(simpleViewX)
    }

    if counter == 2 {
        simpleViewX = SimpleVC4().view
        simpleViewY = SimpleVC5().view
        shiftView.addSubview(simpleViewY)
        shiftView.addSubview(simpleViewX)
    }

    if counter == 3 {
        simpleViewX = SimpleVC6().view
        simpleViewY = SimpleVC7().view
        shiftView.addSubview(simpleViewY)
        shiftView.addSubview(simpleViewX)
    }

    if counter == 4 {
        simpleViewX = SimpleVC8().view
        simpleViewY = SimpleVC9().view
        shiftView.addSubview(simpleViewY)
        shiftView.addSubview(simpleViewX)
    }

    if counter == 5 {
        simpleViewX = SimpleVC10().view
        simpleViewY = SimpleVC11().view
        shiftView.addSubview(simpleViewY)
        shiftView.addSubview(simpleViewX)
    }

    if counter == 6 {
        simpleViewX = SimpleVC12().view
        simpleViewY = SimpleVC13().view
        shiftView.addSubview(simpleViewY)
        shiftView.addSubview(simpleViewX)
    }
}


func getTitle() {
    theTitleLable.text = theTitleArray[counter]
}

@IBAction func tabselected(_ sender: Any) {
    switch (sender as AnyObject).selectedSegmentIndex {
    case 0:
        shiftView.bringSubviewToFront(simpleViewX)
        break
    case 1:
        shiftView.bringSubviewToFront(simpleViewY)
        break
    default:
        break
    }
}
}

最佳答案

我假设您在 ScrollView 中使用 shiftView 作为“容器”,并使用加载的 simpleViewXsimpleViewY 来确定 shiftView 的高度...

不是将简单 View 添加为 shiftView 的 subview ,而是使用垂直 UIStackView 作为 shiftView 的 subview 。添加您的简单 View 作为堆栈 View 的 arrangedSubviews。要“切换”哪个 View 可见,请隐藏另一个 View 。堆栈 View 将根据剩余的可见 View 自动变短或变高,并且通过将 shiftView 的高度限制为堆栈 View 的高度,您的可滚动高度也将自动设置。

如果您这样做,则不需要 .bringSubviewToFront

关于ios - 使用分段 Controller 重叠 UIView 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55054763/

相关文章:

ios - 在 iOS 12 中将 UIColours 数组存档和取消存档到 NSUserDefaults?

ios - 在键盘上显示带有按钮的 UIView,例如 Skype、Viber 信使(Swift、iOS)

ios - 如何在 Swift 中对 1 个字节的扩展 ASCII/macOS Roman(字符从 128 到 255)进行编码?

ios - 如何在 Objective C 中将 PDF 转换为二进制

android - React Native 添加 Picker 数组

ios - 从顶部而不是固有大小的中心开始动画

ios - 当我滚动时,TableView 仅加载一个单元格的内容

ios - 我可以检查现在是否显示任何 UIAlertView 吗?

ios - UIImagePickerController fatal error : unexpectedly found nil while unwrapping an Optional value

ios - 如何使用 Date() 函数和应用程序位于前台和后台时的时间戳来获取耗时?