2014-10-20 4 views
0

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

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:@"ALL", @"HOUSE", @"SENATE", nil]]; 
segmentedControl.frame = CGRectMake(24, 0, 272, 30); 
[segmentedControl addTarget:self action:@selector(segmentedControlHasChangedValue:) forControlEvents:UIControlEventValueChanged]; 
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; 

segmentedControl.tintColor = [UIColor grayColor];  
[self.view addSubview:segmentedControl]; 
segmentedControl.selectedSegmentIndex = 0; 

self.tableView.tableHeaderView = segmentedControl; 

Я не могу установить рамки, независимо от того, какое значение ставить его всегда 100% в ширину. Как я могу установить маркер 24px слева и справа?

+0

Здесь вы используете 'UISegmentControl' для заголовка' UITableView', поэтому он принимает полную ширину. Вам нужно создать 'UIView' для заголовка и добавить к этому представлению segmentControl. – Kampai

ответ

1

Это потому, что вы используете элемент управления сегментами как tableHeaderView. UITableViewHeaderView всегда будет таким же широким, как и TableView. Вы можете изменить высоту.

+0

Он работает, спасибо akshaynhegde. –

1

Во-первых, вы добавляете segmentedControl на просмотр контроллера [self.view addSubview: segmentedControl], а затем назначить его для просмотра заголовка таблицы

self.tableView.tableHeaderView = segmentedControl; 

Что не так, вам нужно создать представление с заголовком размер таблицы размер, а затем добавить segmentedControl добавить в представление и назначить это представление в виде заголовка таблицы.

Пример

**UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 30)]; 
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:@"ALL", @"HOUSE", @"SENATE", nil]]; 
segmentedControl.frame = CGRectMake(24, 0, 272, 30); 
[segmentedControl addTarget:self action:@selector(segmentedControlHasChangedValue:) forControlEvents:UIControlEventValueChanged]; 
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; 
segmentedControl.tintColor = [UIColor grayColor];  
[view addSubview:segmentedControl]; 
self.tableView.tableHeaderView = view;** 
1

Добавление akshaynhegde ответа, вы можете легко достичь этого путем добавления дополнительных UIView как родителя и добавить к этому UISegmentControl UIView. В этом случае родительский UIView примет всю ширину UITableView, но не UISegmentControl.

Так должно быть следующее изменение в коде

UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0,0,320.0,30.0)]; 
[view addSubview:segmentedControl]; 

self.tableView.tableHeaderView = view; 

Это должно решить вашу проблему.

Cheers.

+0

Спасибо iphonic, это работает. –