У меня есть UIButton на раскадровке ViewController. Когда я загружаю данные в форму и макет значительно меняется, кнопка не распознает действие касания.
Я выяснил, что когда кнопка видна в окне прокрутки сразу после нее, если она заполнена данными, действие касания работает.
Если данные слишком длинные и кнопка вначале не видна, только когда она прокручивается на дисплей, сенсорное действие не работает.
Я проверял, есть ли что-то над кнопкой, но ничего. Я попытался изменить zPosition кнопки, не решил проблему.
В чем может быть проблема?
Я создал пользовательские классы из UIScrollView и UIButton, чтобы проверить, как срабатывает событие touch. Это показывает то же поведение, что очевидно. Если кнопка видна в самом начале, срабатывает событие touchesBegan UIButton. Если кнопка перемещается вниз и не видна в начале, она никогда не срабатывает, но вместо этого вызывается touchchesBegan вида прокрутки.
В зависимости от размера данных, которые я загружаю на страницу, иногда кнопка видна в начале, но форму все равно можно немного прокрутить. В этом случае кнопка все еще работает, поэтому кажется, что это поведение не зависит от того, прокручивается ли прокрутка раньше или нет, только от начальной видимости кнопки.
Существует ли какая-либо функция обновления макета или дисплея, которая должна вызываться для возврата поведения к кнопке?
Часть кода, которая обеспечивает изменение размера представления содержимого для прокрутки, если заполненным данным требуется больше места.
func fillFormWithData() {
dispDescription.text = jSonData[0]["advdescription"]
dispLongDescription.text = jSonData[0]["advlongdesc"]
priceandcurrency.text = jSonData[0]["advprice"]! + " " + jSonData[0]["advpricecur"]!
validitydate.text = jSonData[0]["advdate"]!
contentview.layoutIfNeeded()
let contentRect = CGRect(x: 0, y: 0, width: scrollview.frame.width, height: uzenetbutton.frame.origin.y+uzenetbutton.frame.height+50)
contentview.frame.size.height = contentRect.size.height
scrollview.contentSize = contentview.bounds.size
}
Хорошо, значит, еще одно обновление. Я покрасил фон содержимого в синий цвет, а фон прокрутки в белый. Когда я загружаю данные и изменяю размеры макета, представление содержимого изменяется, как и ожидалось, однако теперь представление прокрутки идет ко дну. После того, как я прокручиваю вид, он изменяет размер до исходного размера, который соответствует экрану. Теперь кнопка распознается только тогда, когда я касаюсь синего цвета позади. С белым фоном он больше не распознается, поэтому кажется, что при просмотре прокрутки скрывается кнопка.