簡(jiǎn)介:
UIScrollView竞川、UICollectionView、UITableView在設(shè)備屏幕切換橫豎屏?xí)r床牧,布局的變化會(huì)導(dǎo)致其自動(dòng)滾動(dòng)遭贸,導(dǎo)致其位置不是原先的位置了。
出現(xiàn)場(chǎng)景:
場(chǎng)景1:以UIScrollView及其子類view著蛙,contentSize達(dá)到一定的長(zhǎng)度,滾動(dòng)到某個(gè)位置時(shí)踏堡,進(jìn)行設(shè)備橫豎屏切換咒劲,再次回歸設(shè)備切換前的方向時(shí),滾動(dòng)位置發(fā)生了變動(dòng)帐偎;
場(chǎng)景2:當(dāng)前控制器為UIScrollView及其子類view蛔屹,contentSize達(dá)到一定的長(zhǎng)度,滾動(dòng)到某個(gè)位置時(shí)嫉父,進(jìn)行設(shè)備橫豎屏切換沛硅,或者進(jìn)行跳轉(zhuǎn)下一控制器(且下一控制器為改控制器的屏幕方向不同;例如:當(dāng)前屏幕方向和豎屏摇肌,下一控制器方向?yàn)闄M屏)仪际。
出現(xiàn)原因:
原因1:設(shè)備在橫豎屏切換時(shí),會(huì)導(dǎo)致屏幕寬(width)和高(height)互換树碱,這樣會(huì)導(dǎo)致以UIScrollView及其子類view的contentSize變化成榜,引起滾動(dòng)位置的變化;
原因2:以UIScrollView及其子類view赎婚,進(jìn)行了自動(dòng)化布局,而不是定寬定高布局挣输。
解決方法:
方法1:采用frame布局纬凤;
方法2:自動(dòng)布局;但是對(duì)view的寬高撩嚼,進(jìn)行定值設(shè)置停士。
相關(guān)代碼:
1.問(wèn)題代碼:
tableView.snp.makeConstraints { (make) in
make.top.equalTo(navBar.snp.bottom)
make.left.right.equalToSuperview()
make.bottom.equalTo(-(kTabBarHeight + kBottomSafeMargin))
}
2.解決代碼:
tableView.snp.makeConstraints { (make) in
make.left.equalTo(0)
make.top.equalTo(navBar.snp.bottom)
make.width.equalTo(kScreenWidth)
make.height.equalTo(kScreenHeight - (kTabBarHeight + kBottomSafeMargin) - kNavigationHeight)
}