2016-05-09 4 views
0

ich UIDatePicker und UIPickerView in meiner app verwenden. Aber beide Steuerelemente zeigen seltsames Verhalten. Wenn ich den Inhalt des Auswahlfensters durchblättere, fließt er außerhalb des Auswahlfensters und scrollt nicht wie gewünscht. Meine Implementierung ist wie folgt.UIPickerView Inhalt fließt unerwartet

sexArray = @[@"Male", @"Female"]; 
UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 50, 100, 150)]; 
[picker setDataSource: self]; 
[picker setDelegate: self]; 
picker.showsSelectionIndicator = YES; 
genderTF.inputView = picker; 


#pragma mark -- UIPICKERVIEW METHODS 

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ 
return sexArray.count; 
} 

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ 
return 1; 
} 

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row 
     forComponent:(NSInteger)component reusingView:(UIView *)view { 
UILabel *retval = (UILabel*)view; 
if (!retval) { 
    retval = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100, [pickerView rowSizeForComponent:component].height)]; 
} 

retval.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:15.0f]; 
retval.minimumScaleFactor = 0.6; 
[retval setTextAlignment:NSTextAlignmentCenter]; 
retval.text = [sexArray objectAtIndex:row]; 

return retval; 
} 

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ 
[genderTF setText:sexArray[component]]; 
} 

Wenn der gleiche Code in einer anderen Anwendung (zum Testen) verwendet wird, funktioniert es wie erwartet.

Editing began

When content Scrolled

+0

RETVAL = [[UILabel alloc] Initwithframe: CGRectMake (0.0f, 0.0f, 100, [picker rowSizeForComponent: Komponente] .Height)]; zu RETVAL = [[UILabel alloc] Initwithframe: CGRectMake (0.0f, 0.0f, self.view.frame.size.width, [picker rowSizeForComponent: Komponente] .Height)]; –

+0

@rkmakwana Ich denke, die 'Schrift size' oder die' minimumScaleFactor' dies wirkt sich möglicherweise. Ich denke, die Schriftgröße ist höher als die Etikettenhöhe. versuchen Sie, Hintergrundfarbe für das Etikett –

Antwort

2

helfen Es stellte sich heraus, dass die Umsetzung von mir richtig war. Das Problem lag an einer Drittanbieter-Bibliothek.

ich ein pod SLPagingView in meinem Projekt wurde mit der die `Tat seltsam‚UIPickerView gemacht. Ich konnte keine Lösung finden und habe den Pod durch einen ähnlichen Pod ersetzt.

Einzelheiten link

+0

Dank für die Lösung wurde ich auch gleiche von den letzten paar Tagen konfrontiert nun endlich das Problem kennen lernen – PinkeshGjr

0

Sie müssen titleForRow statt viewForRow implementieren.

-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ 


return [sexArray objectAtIndex:row]; 

} 

Update:

Wenn Sie Picker Ansicht verwenden als input view von textfield dann init es nicht mit Rahmen.

Init-Picker Ansicht wie,

UIPickerView *picker = [[UIPickerView alloc] init]; 

Hope this :)

+0

nicht funktioniert. Immer noch das gleiche Verhalten. Und wie ich in der Frage erwähnt habe, passiert es auch mit UIDatePicker. – rkmakwana

+0

überprüfen Sie mein Update in Antwort – Lion

0

fand ich dieses Problem, weil ich eine Drittanbieter-lib genannt „SLPagingView“ verwendet wird, weiß ich nicht, ob Sie es verwendet auch. Wenn Sie dies getan haben, kann dies helfen. Ich habe gerade dieses Problem gelöst durch Modifizieren der - (void) SetFrame: (CGRect) Rahmen und - (void) updateConstraints Methoden in der "UIScrollView + UpdateContentSize.m" Datei, und hier ist mein Code:

#pragma mark - OVERRIDE 
-(void)setFrame:(CGRect)frame { 
    [super setFrame:frame]; 
    // Scale the content size 
    Class UIPickerTableView = NSClassFromString(@"UIPickerTableView"); 
    if ([self class] == UIPickerTableView) { 
     return; 
    }else { 
     [self updateContentSize]; 
    } 
} 

-(void)updateConstraints { 
    [super updateConstraints]; 
    // Scale the content size 
    Class UIPickerTableView = NSClassFromString(@"UIPickerTableView"); 
    if ([self class] == UIPickerTableView) { 
     return; 
    }else { 
     [self updateContentSize]; 
    } 
} 

Dies funktioniert und wünschte, es könnte Ihnen auch helfen.