addArrangedSubview против addSubview - PullRequest
2 голосов
/ 18 марта 2019

Я новичок, и я написал customView, унаследованный от StackView, и я создал button программно с несколькими атрибутами, и когда я добавляю его в свое настраиваемое представление, у меня возникают две проблемы:

  1. Если я использую addArrangedSubview(myBtn), мой вид игнорирует добавленные мной атрибуты и заполняет всю ширину.Но если я использую addSubView(myBtn), все в порядке (синий квадрат в 44x44)
  2. Если я использую addArrangedSubview(myBtn), addTarget() не работает и myBtn не активируется, но когда я использую addSubView(myBtn), Он отлично работает.

Вот мой класс просмотра:

import UIKit

class RatingControl: UIStackView {

//MARK: Initialization
override init(frame: CGRect) {
    super.init(frame: frame)
    setupButtons()
}

required init(coder: NSCoder) {
    super.init(coder:coder)
    setupButtons()
}

//MARK: Private Methods
private func setupButtons() {

    // Create the button
    let button = UIButton()
    button.backgroundColor = UIColor.blue

    // Add constraints
    button.translatesAutoresizingMaskIntoConstraints = false
    button.heightAnchor.constraint(equalToConstant: 44.0).isActive = true
    button.widthAnchor.constraint(equalToConstant: 44.0).isActive = true

    // Setup the button action
    button.addTarget(self, action: #selector(ratingButtonTapped(_:)), for: .touchUpInside)

    // Add the button to the stack
    addArrangedSubview(button)

}
//MARK: Button Action
@objc func ratingButtonTapped(_ sender: Any) {
    print("Button pressed ?")
}

}

Вот предварительный просмотр:

enter image description hereenter image description here

В чем разница между addSubView() и addArrangedSubview()?почему эти проблемы случаются?

1 Ответ

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

Я предполагаю, что вы хотите добавить несколько кнопок по горизонтали (например, с помощью стандартного элемента управления рейтингом «звездочки»).

A UIStackView, как можно догадаться из его метода .addArrangedSubview(), упорядочивает его подпредставлений на основе его .axis, .alignment, *Свойства 1011 * и .spacing, а также их frame.

Итак, прочитайте немного о UIStackView и о том, как его можно использовать.Скорее всего, вы в настоящее время ограничиваете свой пользовательский вид:

  • верх
  • ведущий
  • трейлинг (или ширина)

Такдобавление вашей кнопки в качестве arrangedSubView приводит к ее растяжению до ширины представления стека, поскольку это значение по умолчанию.

Добавление ее в качестве subview просто накладывает кнопку на представление стека, а не позволяетпредставление стека, чтобы упорядочить его, и ваше представление стека, вероятно, тогда будет иметь высоту ноль - так что кнопку нельзя нажать.

Попробуйте установить только верхние и ведущие ограничения при добавлениипользовательский вид стека.Это должно дать вам кнопку 44 x 44, которую можно нажимать.

Когда вы добавляете больше кнопок, используя .addArrangedSubview(), эти кнопки будут располагаться горизонтально, что, вероятно, вам и нужно.

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