當我更改我的滾動視圖的框架時,有一些問題...有時這種更改會導致滾動,有時不會。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