2015-11-02 2 views
1

У меня есть приложение, которое использует UIPickerView для установки различных параметров, связанных с стилем линии для серии графов (ширина линии, цвет и стиль линии). Этот сборщик используется в строке таблицы. Я определил кадр для сборщика так, чтобы его ширина заполняла ширину элемента contentView ячейки. До IOS 9 это работало. С iOS 9, по-видимому, существует какая-то максимальная максимальная ширина по ширине UIPickerView. Кто-нибудь сталкивался с чем-то похожим на это?UIPickerView Максимальная ширина в iOS 9

Вид подборщика создается так:

self.picker = [[[UIPickerView alloc] init] autorelease]; 
[self.contentView addSubview:self.picker]; 
self.picker.dataSource = self; 
self.picker.delegate = self; 
self.picker.backgroundColor = [UIColor grouped_table_view_background_colour]; 

Клетка уложены следующим образом:

-(void) layoutSubviews 
{ 
    // we need to allow the base class to perform its layout. 
    static CGFloat left_margin = 40; 
    static CGFloat right_margin = 40; 
    CGSize my_size; 
    [super layoutSubviews]; 
    my_size = self.contentView.bounds.size; 
    my_size.width -= left_margin + right_margin; 

    // we now need to lay out the views. 
    CGRect picker_rect = CGRectMake(left_margin, 5, my_size.width, my_size.height); 
    self.picker.frame = picker_rect; 

    // we want to look at the bounds of the picker 
    CGRect picker_bounds = self.picker.bounds; 
    NSLog(@"picker bounds x=%g, y=%g, w=%g, h=%g", picker_bounds.origin.x, picker_bounds.origin.y, picker_bounds.size.width, picker_bounds.size.height); 
} 

Я также перегружать метод widthForComponent следующим образом:

-(CGFloat) pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component 
{ 
    // we want to look at the bounds of the picker 
    CGRect picker_bounds = self.picker.bounds; 
    NSLog(@"picker bounds x=%g, y=%g, w=%g, h=%g", picker_bounds.origin.x, picker_bounds.origin.y, picker_bounds.size.width, picker_bounds.size.height); 
    return picker_bounds.size.width/3; 
} 

Я вижу, что границы представления отображаются правильно как в значениях, которые а также цвет фона в представлении. Несмотря на это, сборщик, кажется, заполняет менее половины ширины, доступной (688 очков на моем iPad)

+0

Я до сих пор не знаю, что вызывает это, но ударил по обходному пути, используя три вида выбора, а не один вид сборщика с тремя компонентами. –

ответ

1

После [[UIPickerView alloc] init] Picker имеет размер {320,216}, и этот размер будет использоваться в pickerView:widthForComponent:. Если вы просто измените размер сборщика после этого, функция pickerView:widthForComponent: не будет вызываться снова, поэтому компоненты застревают по их ширине.

Try инициализацию подборщика с правильным размером, как .. picker=[[UIDatePicker new] initWithFrame:CGRectMake(0.0, 0.0, CGRectGetWidth(self.view.bounds), 216.0)];

или позвоните [self.picker setNeedsLayout] после изменения сборщика кадра, чтобы заставить pickerView:widthForComponent: называться снова.

Смежные вопросы