【问题标题】:Segment control width iOS 6段控制宽度 iOS 6
【发布时间】:2012-09-22 00:35:20
【问题描述】:

我有一个简单的段控件,我在其中放置突出显示和正常状态的图像。
我设置了分段控制的框架,使其完美地适合图像。在 iOS 6 之前它工作得非常好。它显示出意外的行为,它将段控制高度更改为所需的高度,但宽度保持不变。图片比segment小,需要调整图片大小或者segment控制属性。

下面是代码:

- (void)initTitleControl:(id)delegate {
    UIImage *leftImage;
    UIImage *rightImage;
    UIImage *leftImageText = [GBImageManager drawTextOnImage:leftImage color:UIColorFromRGB(0xffffff) text:@"List"];
    UIImage *rightImageText = [GBImageManager drawTextOnImage:rightImage color:UIColorFromRGB(0x076aac) text:@"Map"];
    UISegmentedControl *segmentControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:leftImageText, rightImageText, nil]];

    [segmentControl setSelectedSegmentIndex:0];
    [segmentControl setTintColor:UIColorFromRGB(0x076aac)];
    [segmentControl setSegmentedControlStyle:UISegmentedControlStyleBar];
    [segmentControl setMomentary:YES];
    CGRect frame = CGRectMake(0, 0, 105, 32);
    [segmentControl setFrame:frame];    
    [segmentControl addTarget:self action:@selector(onSegmentedChanged:) forControlEvents:UIControlEventValueChanged];

    self.navigationItem.titleView = segmentControl;
    [delegate setSegmentedControl:segmentControl];
}

我不明白它在以前的 iOS 版本中是否可以正常工作,为什么在 iOS 6 中会出现这种行为。还有哪些其他控件在 iOS 6 中出现意外行为?

【问题讨论】:

    标签: ios ios6 uisegmentedcontrol


    【解决方案1】:

    我也使用更宽的图像解决了这个问题。但我发现一个更简洁的方法是:

     float version = [[[UIDevice currentDevice] systemVersion] floatValue];
     if (version >= 6.0) {
    [[UISegmentedControl appearance] setWidth:leftImage.size.width -1.5 forSegmentAtIndex:0];
    [[UISegmentedControl appearance] setWidth:rightImage.size.width -1.5 forSegmentAtIndex:1];}
    

    我在iOS 4.3模拟器中做了版本检查,这是不允许的,因为这种方法可以在iOS 5或更高版本中使用。 我将宽度 - 1.5 调整为图像大小,因为我没有使用任何分隔图像,并且它显示了两个段之间的间隙。我仍然想知道是否有人有另一种方法或回答为什么它在 iOS 6 中表现不同。

    【讨论】:

      【解决方案2】:

      .h 文件中:

      IBOutlet UISegmentedControl *segmentCont;
      

      .m文件中,设置段数组。

      noArray=@[@"OneDay",@"20-20",@"Test"];
      
      segmentCont=[[UISegmentedControl alloc] initWithItems:noArray];
          segmentCont.segmentedControlStyle = UISegmentedControlStyleBar;
      
          segmentCont.selectedSegmentIndex = 0;
          lbl1.text=[noArray objectAtIndex:0];
          [segmentCont addTarget:self action:@selector(Select_Value:) forControlEvents:UIControlEventValueChanged];
      
      // Segment Control
      -(void)Select_Value:(id)sender{
      
          UISegmentedControl *segmentedControl2 = (UISegmentedControl *)sender;
          lbl1.text=[segmentedControl2 titleForSegmentAtIndex: [segmentedControl2 selectedSegmentIndex]];// intValue];
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-28
        • 2015-08-27
        • 2013-09-24
        • 1970-01-01
        • 1970-01-01
        • 2012-11-12
        • 1970-01-01
        相关资源
        最近更新 更多