即使在ios中滚动后,也在底部设置UIPickerView的位置

即使在ios中滚动后,也在底部设置UIPickerView的位置,ios,uiscrollview,uipickerview,Ios,Uiscrollview,Uipickerview,我试图在单击UITextField时显示UIPickerView。我使用一个简单的方法来显示选择器,如下所示: -(void) showPickerView { [self.view resignFirstResponder]; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.50]; [UIView setAnimationCurve:UIViewAnimatio

我试图在单击
UITextField
时显示
UIPickerView
。我使用一个简单的方法来显示
选择器
,如下所示:

-(void) showPickerView {

    [self.view resignFirstResponder];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.50];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

    CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;
    if(iOSDeviceScreenSize.height == 480){

        CGRect frame = self.picker.frame;
        frame.origin.y = 270;
        self.picker.frame = frame;
        frame = self.toolBar.frame;
        frame.origin.y = 226.0;
        self.toolBar.frame = frame;

    } else if(iOSDeviceScreenSize.height == 568){

        CGRect frame = self.picker.frame;
        frame.origin.y = 239.0;
        self.picker.frame = frame;
        frame = self.toolBar.frame;
        frame.origin.y = 195.0;
        self.toolBar.frame = frame;

    }

    [UIView commitAnimations];

}

如果我没有向下滚动,效果会很好。但当我向下滚动时,我的
选取器
被放置在固定位置,如
showPickerView
方法中所述。现在我如何管理它,使我的
选择器每次都出现在底部

我可以假设您正在滚动视图中显示选择器,对吗? 如果是这样,那么您的选择器框架是相对于UIScrollView的,而不是相对于屏幕视图的。 因此,您必须考虑滚动视图偏移。诸如此类:

    CGRect frame = self.picker.frame;
    frame.origin.y = self.scrollvew.contentOffset.y + 270;

否则,您可以在UIScrollView之外显示选择器(只需将其添加到屏幕视图中即可)。

解决方案1:

将pickerview添加到窗口中

解决方案2:

执行scrollview委托并连续调整帧

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{


    CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;
    if(iOSDeviceScreenSize.height == 480){

        CGRect frame = self.picker.frame;
        frame.origin.y = 270;
        self.picker.frame = frame;
        frame = self.toolBar.frame;
        frame.origin.y = 226.0;
        self.toolBar.frame = frame;

    } else if(iOSDeviceScreenSize.height == 568){

        CGRect frame = self.picker.frame;
        frame.origin.y = 239.0;
        self.picker.frame = frame;
        frame = self.toolBar.frame;
        frame.origin.y = 195.0;
        self.toolBar.frame = frame;

    }



}

为什么要更改frame=self.toolBar.frame;又是y值?还有一件事,检查一下你们在委托方法中改变框架的地方,我对选择器和工具栏使用了相同的框架变量。我不会在任何委托方法中更改它。我在需要显示PickerView的地方使用这种方法,只需删除工具栏框架并进行检查。除此之外,这里没有什么复杂的业务逻辑。o/w为toolbar frametoolBar执行另一个CGrect不会影响pickerview。亲爱的,我想你没有明白我的问题。它工作正常,但只有在我没有向下滚动的情况下。但如果我更改textfield委托中的contentOffset,它会出现同样的问题。