покрытие стека прозрачной кнопкой

У меня есть горизонтальный стек с 3-мя подвидами (представление изображения, кнопка и другая кнопка с изображением), как показано ниже,

view
  stackview
     imageview
     button
     button
or
image|button|button

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


person Atarang    schedule 25.02.2018    source источник
comment
Почему бы вам не добавить вместо этого жест?   -  person Jake    schedule 26.02.2018


Ответы (2)


Добавьте его непосредственно в view после того, как вы добавили stackView (чтобы он отображался после stackView):

view
   stackView
      imageview
      button
      button
   transparentButton

Хитрость здесь в том, что если за view.addSubview(stackView) следует view.addSubview(transparentButton), то transparentButton отображается над stackView и его содержимым, и он получит события касания вместо содержимого позади.

А затем просто добавьте ограничения, которые заставят его копировать кадр stackView:

NSLayoutConstraint.activate([
    transparentButton.leftAnchor.constraint(equalTo: stackView.leftAnchor),
    transparentButton.rightAnchor.constraint(equalTo: stackView.rightAnchor),
    transparentButton.topAnchor.constraint(equalTo: stackView.topAnchor),
    transparentButton.bottomAnchor.constraint(equalTo: stackView.bottomAnchor),
])

Хотя я должен сказать, что это кажется немного странным, что вы хотите добавить кнопку для наложения других кнопок. Возможно, вы захотите заменить эти кнопки в stackView на UILabels.

person Milan Nosáľ    schedule 25.02.2018
comment
@ Да, если описанный вами трюк сработает, я заменю внутренние кнопки на метки. Я попробую предложение и обновлю результаты. - person Atarang; 25.02.2018
comment
На самом деле это не сработало именно из-за немного более сложной компоновки, чем то, что я описал. В приведенном выше сценарии я бы использовал несколько видов стека из-за дизайна. Я бы поставил ряд изображений, меток, изображений в вертикальном представлении стека, и был еще один ряд представлений в другом горизонтальном представлении стека, и оба они были в вертикальном представлении стека. Добавление кнопки, как было предложено, оказалось немного сложным. Ваше предложение было полезным, но я решил его следующим образом: я удалил два горизонтальных представления стека и использовал «UIVIEW» для хранения изображения, ярлыка, кнопки, а затем добавил два UIViEW в вертикальное представление стека. Это сработало. - person Atarang; 28.02.2018

Вы не можете добавить элемент внутри stackView с определенным выравниванием, чем другие, вы должны создать эту прозрачную кнопку в той же иерархии с ее рамкой, равной рамке stackView, или установить ее с помощью автомакета. Верх, низ, начало и конец

person Sh_Khan    schedule 25.02.2018