В iOS 7 sizeWithFont: устарело. Теперь вы должны использовать sizeWithAttribute:.
Но я бы не решил эту проблему. Есть два способа сделать это:
1) Чтобы использовать [buttonToFit], убедитесь, что AutoLayout отключен. В противном случае вы не сможете настроить размер кнопки программным способом. Вам придется настроить размер ваших ограничений.
2) Однако этот ответ очень ограничен в использовании. В примере, который я собираюсь показать вам, кнопка исчезнет с экрана, потому что текст находится на одной строке. Чтобы изменить высоту вашей кнопки при ограничении ширины, используйте следующий код. Еще раз убедитесь, что автопереключение отключено или это не сработает.
UIFont *font = [UIFont fontWithName:@"Helvetica-Bold" size:14.0];
NSString *text = @"This is a very long new title for the button to be sure, now I'm going to add even more";
[self.testButton setTitle:text forState:UIControlStateNormal];
self.testButton.titleLabel.font = font;
CGFloat width = self.testButton.frame.size.width - 10; //button width - padding width
NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: font}];
CGRect rect = [attributedText boundingRectWithSize:(CGSize){width, CGFLOAT_MAX}
options:NSStringDrawingUsesLineFragmentOrigin
context:nil];
CGSize size = rect.size;
size.height = ceilf(size.height);
size.width = ceilf(size.width);
self.testButton.frame = CGRectMake(self.testButton.frame.origin.x, self.testButton.frame.origin.y, self.testButton.frame.size.width, size.height + 15);
Поскольку boundingRectWithSize передаст вам прямоугольник с нецелыми размерами, вы должны использовать ceilf для округления.
Я вычитаю 10 из ширины, прежде чем передать ее в boundingRectWithSize, чтобы создать отступ для моей кнопки.