UISegmentedControl setFrame不起作用

时间:2014-10-20 06:35:52

标签: ios iphone uitableview ios7 uisegmentedcontrol

我正在尝试将分段控件添加到tableviewheader。我使用以下代码来做到这一点

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的边距?

3 个答案:

答案 0 :(得分:1)

这是因为您将段控件用作tableHeaderView。 UITableViewHeaderView将始终与tableView一样宽。你只能改变高度。

答案 1 :(得分:1)

首先,在控制器视图中添加segmentedControl [self.view addSubview:segmentedControl],然后将其分配给表头视图

self.tableView.tableHeaderView = segmentedControl;

哪个错误,您需要创建一个包含大小表标题大小的视图,然后在视图上添加segmentedControl add并将此视图分配给表标题视图。

示例

**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;**

答案 2 :(得分: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;

它应该可以解决你的问题。

干杯。