1

I've set the height of my UISegmentedControl in Storyboard with a constant. When I run the app - it looks fine and how I want it to look. However, as soon as I select a segment (anyone) the UiSegmentedControl changes its height to default one. If I select the current index again a few times, it returns to the height I set it to.

Can someone tell me whats going on here?

Thank you!

Edit Some code:

This method is called from viewDidLoad

    -(void)setupSegmented
{
    self.segmentedControl.tintColor = [UIColor clearColor];

    if ([UIImage instancesRespondToSelector:@selector(imageWithRenderingMode:)]) {

        /* For non Selected Segments */
            self.allInactive = [[UIImage imageNamed:@"Segment All"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
            self.auctionInactive = [[UIImage imageNamed:@"Segment Auction"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
            self.buyNowInactive = [[UIImage imageNamed:@"Segment Buy Now"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
            self.classifiedInactive = [[UIImage imageNamed:@"Segment Classified"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

        /*For selected Segments */
            self.allActive = [[UIImage imageNamed:@"Segment All Active"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
            self.auctionActive = [[UIImage imageNamed:@"Segment Auction Active"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
            self.buyNowActive = [[UIImage imageNamed:@"Segment Buy Now Active"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
            self.classifiedActive = [[UIImage imageNamed:@"Segment Classified Active"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    }

    [self.segmentedControl setImage:self.allInactive forSegmentAtIndex:0];
    [self.segmentedControl setImage:self.auctionInactive forSegmentAtIndex:1];
    [self.segmentedControl setImage:self.buyNowInactive forSegmentAtIndex:2];
    [self.segmentedControl setImage:self.classifiedInactive forSegmentAtIndex:3];

}

Thus method is called when I tap a segment:

    - (IBAction)segmentedControlSelected:(UISegmentedControl *)sender {

    switch (sender.selectedSegmentIndex){

    case 0:
        {
            self.tradeType = @"UNSPECIFIED";
            [self.segmentedControl setImage:self.allActive forSegmentAtIndex:sender.selectedSegmentIndex];
            [self.segmentedControl setImage:self.auctionInactive forSegmentAtIndex:1];
            [self.segmentedControl setImage:self.buyNowInactive forSegmentAtIndex:2];
            [self.segmentedControl setImage:self.classifiedInactive forSegmentAtIndex:3];

            break;
        }
    case 1:
        {
            self.tradeType = @"ENGLISH_AUCTION";
            [self.segmentedControl setImage:self.auctionActive forSegmentAtIndex:sender.selectedSegmentIndex];
            [self.segmentedControl setImage:self.allInactive forSegmentAtIndex:0];
            [self.segmentedControl setImage:self.buyNowInactive forSegmentAtIndex:2];
            [self.segmentedControl setImage:self.classifiedInactive forSegmentAtIndex:3];

            break;
        }
    case 2:
        {
            self.tradeType = @"FIXED_PRICE";
            [self.segmentedControl setImage:self.buyNowActive forSegmentAtIndex:sender.selectedSegmentIndex];
            [self.segmentedControl setImage:self.allInactive forSegmentAtIndex:0];
            [self.segmentedControl setImage:self.auctionInactive forSegmentAtIndex:1];
            [self.segmentedControl setImage:self.classifiedInactive forSegmentAtIndex:3];

            break;
        }
    case 3:
        {
            self.tradeType = @"CLASSIFIED_CONTACT";
            [self.segmentedControl setImage:self.classifiedActive forSegmentAtIndex:sender.selectedSegmentIndex];
            [self.segmentedControl setImage:self.allInactive forSegmentAtIndex:0];
            [self.segmentedControl setImage:self.auctionInactive forSegmentAtIndex:1];
            [self.segmentedControl setImage:self.buyNowInactive forSegmentAtIndex:2];

            break;
        }
    }
}
Robert J. Clegg
  • 7,231
  • 9
  • 47
  • 99

1 Answers1

2

I found the solution in this SO answer: Change Height of UISegmentedControl

I had to force the new height in -(void)viewDidLayoutSubViews as its called every time UISegmentedControl is tapped.

Community
  • 1
  • 1
Robert J. Clegg
  • 7,231
  • 9
  • 47
  • 99