当我更改我的滚动视图的框架时,有一些问题...有时这种更改会导致滚动,有时不会。UIScrollView更改contentOffset当更改框架
这是情况。我有一个自定义的UIScrollView作为我的根视图控制器的子视图。 在父视图控制器中,我有一个按钮来更改滚动视图的框架。它在2/3的屏幕和全屏之间变化。此帧更改从不会导致scrollview的contentOffset发生更改。
在scrollview的内容中,我有一些按钮。这些按钮也会更改滚动视图的框架。 但是,有时候,这种变化使滚动视图改变其contentOffset ...
我想不通为什么滚动视图内的按钮使这...
我已经尝试调用一个委托当按钮被触摸时(并且改变父视图控制器中的滚动视图的框架)。 并尝试更改滚动视图内的框架(当按钮被触摸时)。但问题同样出现。
任何想法正在发生什么或解决这种情况?
谢谢!
我试图隔离这个问题,把这个简单的例子与代码。
在我的xib中,只有一个带有框架((20,44),(728,300))的滚动视图和一个调用事件“btnOut”的按钮。 该滚动视图的Paging Enabled和Autoresize Subviews已禁用(其余为默认)。
我将使用布尔值来知道scrollview是否大(bigScroll)。
这里是我的viewDidLoad:
- (void)viewDidLoad
{
[super viewDidLoad];
// the initial frame of scrollView is the big frame
_bigScroll = YES;
// here I put a big content to create some pages in scrollView
[_scrollView setContentSize:CGSizeMake(2184, 300)];
// I put one button in each column
// When scrollView is with big frame it shows two columns and when it is with small frame it shows only one column.
UIButton *btn01 = [UIButton buttonWithType:UIButtonTypeSystem];
[btn01 setFrame:CGRectMake(159, 30, 46, 30)];
[btn01 setTitle:@"01" forState:UIControlStateNormal];
[btn01 addTarget:self action:@selector(btnIn:) forControlEvents:UIControlEventTouchDown];
[_scrollView addSubview:btn01];
UIButton *btn02 = [UIButton buttonWithType:UIButtonTypeSystem];
[btn02 setFrame:CGRectMake(523, 30, 46, 30)];
[btn02 setTitle:@"02" forState:UIControlStateNormal];
[btn02 addTarget:self action:@selector(btnIn:) forControlEvents:UIControlEventTouchDown];
[_scrollView addSubview:btn02];
UIButton *btn03 = [UIButton buttonWithType:UIButtonTypeSystem];
[btn03 setFrame:CGRectMake(887, 30, 46, 30)];
[btn03 setTitle:@"03" forState:UIControlStateNormal];
[btn03 addTarget:self action:@selector(btnIn:) forControlEvents:UIControlEventTouchDown];
[_scrollView addSubview:btn03];
UIButton *btn04 = [UIButton buttonWithType:UIButtonTypeSystem];
[btn04 setFrame:CGRectMake(1251, 30, 46, 30)];
[btn04 setTitle:@"04" forState:UIControlStateNormal];
[btn04 addTarget:self action:@selector(btnIn:) forControlEvents:UIControlEventTouchDown];
[_scrollView addSubview:btn04];
UIButton *btn05 = [UIButton buttonWithType:UIButtonTypeSystem];
[btn05 setFrame:CGRectMake(1615, 30, 46, 30)];
[btn05 setTitle:@"05" forState:UIControlStateNormal];
[btn05 addTarget:self action:@selector(btnIn:) forControlEvents:UIControlEventTouchDown];
[_scrollView addSubview:btn05];
UIButton *btn06 = [UIButton buttonWithType:UIButtonTypeSystem];
[btn06 setFrame:CGRectMake(1979, 30, 46, 30)];
[btn06 setTitle:@"06" forState:UIControlStateNormal];
[btn06 addTarget:self action:@selector(btnIn:) forControlEvents:UIControlEventTouchDown];
[_scrollView addSubview:btn06];
}
两项行动 “btnIn” 和 “btnOut” 调用同一个函数(changeFrameScrollView)。
- (void)changeFrameScrollView {
_bigScroll = !_bigScroll;
if (_bigScroll) {
[_scrollView setFrame:CGRectMake(20, 44, 728, 300)];
} else {
[_scrollView setFrame:CGRectMake(20, 44, 364, 300)];
}
}
我期待什么: 使用按钮即出的滚动型的,框架的变化可以作为我的预期。
- 如果它变成小框架,它会从右侧隐藏列并继续显示左侧的列。
- 如果它变成大框架,它将显示右边的列并且不移动contentOffset。
**与我正在查看的页面无关。
问题: 使用scrollview内部的按钮,有时框架更改会导致contentOffset更改。
- 如果scrollview在一个小框架中,它显示的是02列,我按下里面的按钮它改变框架并显示03和04列(与按钮相同的动作在显示列02和03之外)。
那么......我不能很好地解释,所以我举了一个小例子,当发生这种情况。
也许有些代码会有所帮助。另外,描述内容偏移量的变化。 – Mundi