Обновление
После добавления метода преобразования между прямоугольным и основным представлениями позиция Y в порядке, но координата X смещена вправо наружу основного вида: Выпадающий вид (подпредставление) выключен. Основной вид Ниже находится рамка кнопки до и после метода преобразования. Основной вид - 414 x 896. Выпадающее меню как-то сдвигается вправо, как на прикрепленном изображении. рамка кнопки в стеке btnRect: (120.66666666666666, 0.0, 293.3333333333333, 30.0) рамка кнопки в главном виде: cvtRect (241.33333333333331, 190.0, 293.3333333333333, 30.0): необязательно (>)
* 1013 . Я хочу сделать выпадающий список, показывая UIView с опциями выпадающего меню под кнопкой. Кнопка находится внутри вертикального стека. Я добавляю TableView с опциями раскрывающегося списка в этот раскрывающийся список UIView. Я хочу нажать на кнопку, и у меня будет этот UIView с TableView внутри, чтобы отображаться чуть ниже кнопки. В основном, следуя этому уроку https://www.youtube.com/watch?v=D3DCPaEE4hQ, за исключением того, что моя кнопка находится внутри Вертикального стека.
Issue. UIView и TableView внутри UIView отображаются нормально, когда кнопка нажата. Проблема заключается в расположении выпадающего UIView, которое всегда имеет одинаковое происхождение X = 120, Y = 0.
Вот как я пытаюсь это сделать:
- У меня есть вертикальный стек с 4 рядами
- В 4-м ряду у меня есть метка (ширина = 120 почти такая же, как у координаты X выше) и кнопка , которая вызывает UIView для отображения
- Я использую кнопку для отображения выпадающего списка (в основном UIView), что должно появляться чуть ниже кнопки, когда кнопка нажата, но она всегда появляется в начале координат x = 120 Y = 0, в основном прикрепленной к вершине справа столбец в вертикальном представлении стека. Вертикальный вид стека имеет 1-й столбец с метками и второй столбец с различными элементами управления, такими как кнопки et c.
func addTransparentView(frames: CGRect)
{
let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
transparentView.frame = window?.frame ?? self.view.frame
//some of the stuff I tried to at least centre dropdownUIView
//transparentView.center.x = window?.center.x ?? self.view.center.x
//transparentView.center.y = window?.center.y ?? self.view.center.y
self.view.addSubview(transparentView)
tvPriority.frame = CGRect(x: frames.origin.x, y: frames.origin.y + frames.width, width: frames.width, height: 0)
//some of the stuff I tried to at least centre UIView
//tvPriority.center = verticalStackView.convert(verticalStackView.center, from:tvPriority)
//tvPriority.center.x = view.center.x
//tvPriority.center.y = view.center.y
self.view.addSubview(tvPriority)
tvPriority.layer.cornerRadius = 5
transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.9)
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(removeTransparentView))
transparentView.addGestureRecognizer(tapGesture)
transparentView.alpha = 0
UIView.animate(withDuration: 0.4, delay: 0, usingSpringWithDamping: 1.0, initialSpringVelocity: 1.0, options: UIView.AnimationOptions.curveEaseInOut, animations: {self.transparentView.alpha = 0.5
self.tvPriority.frame = CGRect(x: frames.origin.x, y: frames.origin.y + frames.height, width: frames.width, height: 193)
}, completion: nil)
}
Чтобы успешно сделать выпадающий список, мне нужно, чтобы UIView отображалось чуть ниже рамки кнопок (X, Y, ширина, высота). Но хотя кнопка находится в 4-й строке, которая должна располагаться с гораздо более высоким значением Y, рамка кнопок всегда имеет значение X = 120, Y = 0, поэтому мой UIView всегда закреплен в этом месте над кнопкой, которая должна имитировать выпадающий список.
Вопросы 1. Чего мне не хватает при позиционировании выпадающего UIView? Почему кнопки находятся в положении Y = 0, когда кнопка находится в 4-м ряду Вертикального просмотра стека с явно более высокой позицией Y? Я также попытался просто расположить этот выпадающий список в центре экрана, но это также не работает.
2. Я перешел на iOS разработку из мира веб-разработки, и я Я использовал выпадающий список в моей карьере. Должен ли я просто использовать Picker View вместо этого? Или оповещение? Каков наиболее распространенный и стандартный способ предоставления пользователю списка взаимоисключающих опций в приложении Swift?
Большое спасибо