Почему кнопки социальных сетей выглядят плохо?

#ios #swift #iphone #autolayout #uikit

#iOS #swift #iPhone #автоматическое описание #uikit

Вопрос:

Я определил новости по вертикали вместе в stackview. Я хочу разместить кнопки «Поделиться» горизонтально. У меня есть 5 разных кнопок общего доступа. только 4 из них видны на экране и искажены. Как я могу исправить?

Здесь я определяю stackview и кнопку. свойства всех кнопок одинаковы.

   private let shareStackView: UIStackView = {
        let stackView = UIStackView()
        stackView.axis = .horizontal
        stackView.alignment = .center
        return stackView
    }()
    
    private let facebookShareButton: UIButton = {
        let button = UIButton()
        button.setImage(UIImage(named: "facebook"), for: .normal)
        button.contentMode = .scaleAspectFill
        return button
    }()
  

Я даю здесь определение.

  override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(scrollView)
        scrollView.addSubview(stackView)
        scrollView.addSubview(shareStackView)
        stackView.addSubview(navigationBar)
        stackView.addArrangedSubview(articleTitleLabel)
        stackView.addArrangedSubview(articlePublishedAtLabel)
        stackView.addArrangedSubview(articleImageView)
        stackView.addArrangedSubview(articleContentLabel)
        shareStackView.addArrangedSubview(facebookShareButton)
        shareStackView.addArrangedSubview(twitterShareButton)
        shareStackView.addArrangedSubview(instagramShareButton)
        shareStackView.addArrangedSubview(linkedinShareButton)
        shareStackView.addArrangedSubview(emailShareButton) 
    }
  

** Это код позиции shareStackview **

    self.shareStackView.translatesAutoresizingMaskIntoConstraints = false
        self.shareStackView.leadingAnchor.constraint(equalTo: self.scrollView.leadingAnchor).isActive = true
        self.shareStackView.topAnchor.constraint(equalTo: self.stackView.bottomAnchor).isActive = true
        self.shareStackView.trailingAnchor.constraint(equalTo: self.scrollView.trailingAnchor).isActive = true
        self.shareStackView.bottomAnchor.constraint(equalTo: self.shareStackView.topAnchor, constant: 40).isActive = true
        
        //constrain width of stack view to width of self.view, NOT scroll view
        self.stackView.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true
  

Этот снимок экрана

введите описание изображения здесь

здесь полные коды в github
введите описание ссылки здесь

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

1. Вы пробовали другие значения для button.contentMode ? Если нет, попробуйте поиграть с этим свойством

2. Попробуйте shareStackView.distribution = .equalSpacing

3. @aheze Я сделал StackView.distribution = .fillEqually . все в порядке.

Ответ №1:

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


Равномерно распределите изображения

 stackView.distribution = .equalSpacing
  

Это приведет к равному распределению изображений в stackview в зависимости от его ширины. Изображения должны сохранять свой размер.


Центрируйте изображения на экране.

     self.shareStackView.translatesAutoresizingMaskIntoConstraints = false
    self.shareStackView.leadingAnchor.constraint(greaterThanOrEqualTo: self.scrollView.leadingAnchor).isActive = true
    self.shareStackView.topAnchor.constraint(equalTo: self.stackView.bottomAnchor).isActive = true
    self.shareStackView.centerXAnchor.constraint(equalTo: self.scrollView.centerXAnchor).isActive = true
    self.shareStackView.bottomAnchor.constraint(equalTo: self.shareStackView.topAnchor, constant: 40).isActive = true
        
    //constrain width of stack view to width of self.view, NOT scroll view
    self.stackView.widthAnchor.constraint(lessThanOrEqualTo: self.view.widthAnchor).isActive = true
  

Это изменит ограничения на StackView, чтобы он был меньше ширины экрана, но оставался центрированным.

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

1. Я сделал StackView.distribution = .fillEqually . все в порядке.