Я столкнулся с подобной проблемой, была ограничена ширина моей и хотели, чтобы они росли вертикально, в зависимости от количества текста, который я бы им дал. я закончил с помощью простого решения, основываясь на том, что я узнал в документации компании Apple (https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/ImplementingView/ImplementingView.html)
Я подклассы UIButton
и подменены две функции:
- (void)setBounds:(CGRect)bounds {
if (!CGRectEqualToRect(bounds, self.bounds)) {
[self invalidateIntrinsicContentSize];
}
[super setBounds:bounds];
}
- (CGSize)intrinsicContentSize {
//
CGSize size;
self.titleLabel.frame = CGRectMake(self.titleLabel.frame.origin.x,
self.titleLabel.frame.origin.y,
self.frame.size.width - self.contentEdgeInsets.left - self.contentEdgeInsets.right - self.titleEdgeInsets.left - self.titleEdgeInsets.right,
0);
size = [self.titleLabel sizeThatFits:self.titleLabel.frame.size];
size = CGSizeMake(size.width, size.height + 20);
return size;
}
Что в основном происходит в том, что кнопка аннулирует свой внутренний размер (только когда набор ограничений на самом деле новенький - это предотвращает бесконечный цикл), и когда система запрашивает размер внутреннего содержимого, я пересчитываю это на основе ширины кнопки. Дополнительная высота 20 пикселей для заполнения. Я пробовал много других способов, но поскольку мой макет основан на AutoLayout, мне нужно что-то, что мне не нужно обновлять, когда устройство вращается или так. Это просто работает.
Удачи вам! Z.
Вы привели меня в правильном направлении ... спасибо! – TigerCoding