2009-06-08 2 views

ответ

8

Вы можете сделать это только с помощью кода, а не интерфейса InterfaceBuilder. IB пытается остаться в пределах Apple's HIG, поэтому он не позволяет изменять высоту.

Если вы изменяете высоту (фрейм) программно, вам также нужно изменить изображение, используя setImage: forSegmentAtIndex: поскольку изображение по умолчанию выглядит ужасным при растяжении.

+0

хорошо .. Кажется, я должен сделать это в трудный путь =) – Zteeth

8

Я знаю, что это старый и уже ответил, но для других поисков;

Я обнаружил, что изменение стиля в BAR в атрибутах в IB - очень быстрое и приемлемое обходное решение, которое использует гораздо более короткую графику.

+0

Действительно хороший, я не видел этот вариант :) – darksider

1

Когда я пробовал, я не мог назначить высоту напрямую. Я должен был это сделать:

- (void)adjustSegControlHeight:(UISegmentedControl*)segControl :(NSInteger)newHeight { 

     CGRect segControlFrame = segControl.frame; 
     segControlFrame.size.height = newHeight; 
     segControl.frame = segControlFrame; 
} 

Но я все же решил использовать метод BAR.

+0

КСТАТИ: [segControl кадр] .size.height = newHeight не будет работать потому что [segControl frame] .size.height - свойство readonly. – jianpx

1

Я знаю, что это более старое сообщение, но если кто-то там все еще пытается понять это, я так и делал это. Надеюсь, что это будет полезно для нуждающегося.

UISegmentedControl *customeSegment = [[UISegmentedControl alloc] initWithFrame:CGRectMake(206.0f, 7.0f , 110.0f, 30.0f)];

0

Существует способ сделать это в интерфейсе строителя в эти дни в случае, если кто натыкается на этот вопрос.

1: щелкните сегментированный элемент управления в IB 2: на экране сетки найдите «контактный» элемент управления в правом нижнем углу. 3: нажмите «штырьковую высоту» 4: открыть инспектор размера в области коммунального хозяйства (теперь вы будете иметь ограничение высоты) 5: нажмите на шестеренку и выберите «Выбор и редактирование»

Довольно взломать-й но если вы не сможете это обновить по коду, это сработает.

1

К счастью, вы также можете изменить высоту от xib.

Вы можете сделать это через xib. Просто добавьте управление сегментом в xib. Затем откройте xib в TextEdit. Там вы найдете код

<segmentedControl opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="B99-Tt-vJG"> 

<rect key="frame" x="222" y="82" width="123" height="44"/> 

Здесь вы меняете высоту от 44 до любой требуемой высоты. Вы можете изменить высоту любого UIConponent следующим образом. Даже для UIPickerView.

0

Способ сделать это в iOS 7+, используя AutoLayout, просто добавляет ограничение высоты к сегментированному элементу управления, а затем обновляет фреймы для решения проблем автоматического макета. Затем IB отобразит макет на требуемой высоте. Затем можно отредактировать ограничение высоты, чтобы изменить высоту в любое время от IB.

0

Это работало идеально для меня. И он обновляется для новых версий iOS и Xcode.

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:yoursegmentedControl 
                   attribute:NSLayoutAttributeHeight 
                   relatedBy:NSLayoutRelationEqual 
                   toItem:nil 
                   attribute:NSLayoutAttributeNotAnAttribute 
                  multiplier:1 
                   constant:THE NEW HEIGHT]; 
[yoursegmentedControl addConstraint:constraint]; 
Смежные вопросы