Изменение ограничений для кнопки на другом экране Swift

#ios #swift

Вопрос:

На первом и втором экране у меня есть 2 кнопки, но на третьем экране я должен оставить только одну кнопку, изменить ее название и поместить ее ближе к нижней части экрана. Не могу понять, как изменить положение кнопки, если ее ограничения исходят из раскадровки. Оранжевая бутоньерка вверху, белая бутоньерка под ней. Они расположены вертикально. Я использую 3 экземпляра одного и того же VC для отображения этих кнопок. В 3-м случае я пытаюсь скрыть белую кнопку, которая находится под оранжевой, и оранжевая кнопка должна опуститься.

             if index == 2 {
                whiteButton.isHidden = true
                orangeButton.setTitle("Start”, for: .normal)
                //here I have to set new constraints for orangeButton
            } else {
                whiteButton.isHidden = false
                orangeButton.setTitle("Next”, for: .normal)
            }



 

Комментарии:

1. Вам необходимо предоставить более полное описание вашей настройки и того, что вы пытаетесь сделать. Являются ли «первый и второй экран» разными экземплярами одного и того же контроллера представления? Расположены ли ваши whiteButton и orangeButton расположены вертикально, а orangeButton сверху whiteButton ?

2. (Отредактируйте свой вопрос, чтобы предоставить дополнительную информацию. Не комментируйте мои комментарии. Другие читатели темы должны иметь возможность прочитать ваш вопрос и знать, о чем вы спрашиваете, без необходимости читать целую серию вопросов и ответов.)

Ответ №1:

Если вы хотите, чтобы расстояние между кнопками было одинаковым с разным количеством кнопок, просмотр стека будет потрясающим. Поместите свои кнопки в представление стека. Установите расстояние между элементами на желаемую величину. Скройте те, которые вам не нужны, и представление стека переместит оставшиеся элементы, чтобы правильно разместить их.

Если это не то, о чем вы спрашиваете, обновите свой вопрос, чтобы описать, что вы пытаетесь сделать.

Комментарии:

1. классный совет! thnx) Я думаю, что мне следует попробовать использовать представление стека для изменения положения кнопки

2. Это не очевидно из документов, но представления стека реагируют на скрытие/снятие скрытия элементов, удаляя/добавляя их в стек и регулируя расстояние для компенсации. Это делает их очень мощными и простыми в использовании.

3. Но прежде чем представить третий экземпляр, было бы также легко установить новые ограничения для второй кнопки, которая будет находиться внизу.

4. Конечно, манипулирование ограничениями-это еще один способ сделать это. @Imran0001, вы хотите отредактировать свой вопрос, чтобы показать, как вы изменили бы ограничения (и удалили код, который перемещает кнопку в другое место)? Было бы полезно иметь ответы, которые обеспечивают несколько подходов.

5. @Ducan C, я обновил свой ответ. Пожалуйста, взгляните.

Ответ №2:

Вы можете сделать это, удалив предыдущие ограничения orangeButton

 if indx == 1 { // It is for first screen
      let VC = yourViewControlarClass()
      self.present(VC, animated: true, completion: nil)
            
}else if indx == 2 { // It is for second screen
      let VC = yourViewControlarClass()
      self.present(VC, animated: true, completion: nil)
            
}else if indx == 3 { // It is for third screen which have only orange button bottom of the view
      let VC = yourViewControlarClass()
      VC.whiteButton.isHidden = true
      VC.orangeButton.removeFromSuperView() // for clear all constraint of orangeButton
      VC.orangeButton.frame = CGrect(x: 100, y: 600, width: 200, height: 60) // Giving new position amp; frame for orangeButton, you can change x,y,height,width as per your needs
      VC.orangeButton.setTitle("Start", for: .normal)
      VC.view.addSubView(orangeButton) // adding orangeButton again for that have new constraint
      self.present(VC, animated: true, completion: nil)
}
 

Комментарии:

1. Я не думаю, что оператор пытается переместить кнопку с одного контроллера вида на другой. Основываясь на опубликованном коде, похоже, что первый, второй и третий экраны являются экземплярами одного и того же контроллера представления.

2. @DuncanC вы правы, это экземпляры одного вк

3. Хорошо, тогда я думаю, что ваш вопрос нуждается в более подробном описании. Если вы можете предоставить фотографии ВК, то это лучше.

4. lmran0001, вам следует обновить свой ответ, чтобы точно объяснить, как обновить противопоказания, поскольку такой подход также будет работать (хотя, поскольку в ОП уточнили, что они используют 3 отдельных экземпляра одного и того же VC, вам следует избавиться от кода в своем ответе, который перемещает кнопку на другой контроллер представления.) Если вы предложите четкое, обоснованное альтернативное решение, я, безусловно, проголосую за него.

5. Я не перемещаю кнопку на другой контроллер представления, я просто даю новое ограничение для orangeButton в третьем экземпляре. Пожалуйста, проверьте обновление.