【问题标题】:UISegmentedControl setFrame not workingUISegmentedControl setFrame 不起作用
【发布时间】:2014-10-20 06:35:51
【问题描述】:

我正在尝试向 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 边距?

【问题讨论】:

  • 在这里您将UISegmentControl 应用于UITableView 标题,这就是它占用全宽的原因。您需要为标题创建UIView,然后将segmentControl 添加到此视图。

标签: ios iphone uitableview ios7 uisegmentedcontrol


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    添加到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;
    

    应该可以解决你的问题。

    干杯。

    【讨论】:

      【解决方案3】:

      首先,您在控制器视图 [self.view addSubview:segmentedControl] 上添加 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;**
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多