2016-05-09 67 views
0

我在我的應用中使用了UIDatePickerUIPickerView。但是這兩個控件都顯示出怪異的行爲。當我在選取器中滾動內容時,它會在選取器外面流動,並且不會按照應有的順序滾動。我的實現如下。UIPickerView內容意外流動

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]]; 
} 

當在另一個應用程序中使用相同的代碼(用於測試)時,它按預期工作。

Editing began

When content Scrolled

+0

retval = [[UILabel alloc] initWithFrame:CGRectMake(0.0f,0.0f,100,[pickerView rowSizeForComponent:component] .height)]; 到 retval = [[UILabel alloc] initWithFrame:CGRectMake(0.0f,0.0f,self.view.frame.size.width,[pickerView rowSizeForComponent:component] .height)]; –

+0

@rkmakwana我認爲'font size'或'minimumScaleFactor'可能會影響到這一點。我認爲字體大小高於標籤高度。嘗試爲標籤設置背景顏色 –

回答

2

原來,執行是對我而言是正確的。問題是由於第三方庫。

我在我的項目中使用了一個容器SLPagingView,這使得'UIPickerView'顯得很奇怪。我找不到解決方案,最終用相似的吊艙替換吊艙。

詳細link

+0

感謝解決方案我也面臨相同的最後幾天現在終於知道這個問題 – PinkeshGjr

0

您需要實現titleForRow而不是viewForRow

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


return [sexArray objectAtIndex:row]; 

} 

更新:

如果您正在使用選擇器視圖作爲textfieldinput view則不要使用框架初始化它。

初始化選擇器視圖一樣,

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

希望這將有助於:)

+0

沒有工作。仍然是同樣的行爲。正如我在問題中提到的那樣,它也發生在UIDatePicker上。 – rkmakwana

+0

檢查我的更新回答 – Lion

0

我發現了這個問題,因爲我使用了一種叫做「SLPagingView」第三方lib下,我不知道你是否使用它,太。 如果你這樣做,這可能會有所幫助。 (無效)SETFRAME - 我剛剛通過修改解決了這個問題:(的CGRect)框架和 - 在 「的UIScrollView + UpdateContentSize.m」 文件(無效)updateConstraints方法,這裏是我的代碼:

#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]; 
    } 
} 

這個工作,並希望它可以幫助你。