Вот как я посчитал ширину всех элементов панели кнопок.
Основная идея заключается в том, что их порядок не важен, и мы можем использовать IBOutletCollection:
@property (nonatomic, strong) IBOutletCollection(UIButton) NSArray *allButtons;
и вкод, который выполняется до изменения ориентации:
const CGFloat leftOrRightMargin = 12; // measured on a screenshot
const CGFloat gapBetweenButtons = 10; // measured on a screenshot
const CGFloat experimentalCorrection = 6; // don't ask why
int totalNumberOfButtons = 0;
CGFloat totalWidthOfButtons = 0.0;
for (UIButton *b in allButtons) {
if (b.superview) { // if it's visible
totalNumberOfButtons++;
totalWidthOfButtons += b.bounds.size.width;
}
}
CGFloat occupiedSpace = experimentalCorrection
+ 2 * leftOrRightMargin
// gaps: totalNumberOfButtons-1+1, the last one is for the slider
+ totalNumberOfButtons * gapBetweenButtons
+ totalWidthOfButtons;
// now, resize the slider control
после изменения ориентации:
[myBar setNeedsLayout];