Вы делаете пару вещей неправильно ...
// your code
label.frame.size.width = self.otherlinksStack.bounds.width
label.sizeToFit()
Если вы добавляете метку в stackView, нет необходимости устанавливать его фрейм - пусть стековое представление обрабатывает это,Если выравнивание вашего stackView установлено на .fill
, оно все равно будет растягивать метку до ее ширины.Если для не установлено заполнение, метка будет расширяться по мере необходимости по горизонтали, основываясь на ее тексте.Поэтому также не нужно вызывать .sizeToFit()
.
// your code
self.otherlinksStack.addSubview(label)
. При добавлении представления в представление стека используйте .addArrangedSubview
, в противном случае оно будет добавлено поверх другого представления в представлении стека..
Это должно работать нормально (в моем быстром тесте):
func createLabel() {
let label = UILabel()
label.text = "abc"
label.numberOfLines = 0
label.font = label.font.withSize(17) // my UIFont extension
label.tag = 1
// give the label a background color so we can see it
label.backgroundColor = .cyan
// enable user interaction on the label
label.isUserInteractionEnabled = true
// add the label as an Arranged Subview to the stack view
self.otherlinksStack.addArrangedSubview(label)
// create the gesture recognizer
let labelTapGesture = UITapGestureRecognizer(target:self,action:#selector(self.doSomethingOnTap))
// add it to the label
label.addGestureRecognizer(labelTapGesture)
}
@objc func doSomethingOnTap() {
print("tapped")
}