перекрывающаяся проблема UIView с использованием сегментированного контроллера - PullRequest
0 голосов
/ 08 марта 2019

У меня есть сегментированный контроллер, который вызывает два xib-файла UIViews на экран. Каждый вид будет различаться по длине в зависимости от их содержания. Как содержание для каждого представления отличается. UIView установлены в виде прокрутки.

Я перетаскиваю выбранный UIView перед другими, когда он выбран с использованием сегментированного контроллера. Проблема в том, что при прокрутке вниз видны более длинные представления. Я не могу понять, как только позволить свитку опуститься на дно UIView, который был вытянут вперед.

Я играл с simpleViewX.isHidden или simpleViewY.isHidden в функции tabselected, но это не решило ситуацию, потому что я все еще могу прокрутить вниз в пустое место.

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
    }
}
}

1 Ответ

1 голос
/ 08 марта 2019

Я предполагаю, что вы используете shiftView в качестве "контейнера" ​​в представлении прокрутки и используете загруженные simpleViewX и simpleViewY для определения высоты shiftView ...

Вместо добавления простых представлений в качестве подпредставлений shiftView используйте вертикаль UIStackView в качестве подпредставления shiftView. Добавьте ваши простые представления как arrangedSubviews стекового представления. Чтобы «переключить», какой вид виден, скрыть другой вид. Вид стека автоматически становится короче или выше в зависимости от оставшегося видимого вида, и, ограничивая высоту shiftView до высоты вида стека, ваша высота с возможностью прокрутки также будет автоматически установлена.

Нет необходимости в .bringSubviewToFront, если вы делаете это таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...