необходимо изменить размер элемента управления (UISlider), чтобы заполнить все доступное пространство UIToolbar (iOS) - PullRequest
0 голосов
/ 26 ноября 2011

Мне нужно изменить размер UISlider, чтобы заполнить все доступное пространство UIToolbar, и он должен работать под iOS 4.3 и iOS 5.0. (Ну, у меня есть кое-что, что работает для 5.0, но для 4.3 это все еще загадка.)

Существует панель UIToolbar, кнопки которой настраиваются динамически, включая кнопки, которые отображаются только для альбомной ориентации. (Полный набор указывается в Интерфейсном Разработчике, и некоторые из них удаляются с помощью bar.items = filteredItems) Между кнопками слева и справа находится ползунок (и рядом с ним гибкое пространство).

Я хочу, чтобы ползунок заполнил все доступное пространство между двумя группами кнопок (левой группой и правой группой).

1 Ответ

1 голос
/ 02 декабря 2011

Вот как я посчитал ширину всех элементов панели кнопок.

Основная идея заключается в том, что их порядок не важен, и мы можем использовать 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];
...