iOS版:setContentSize引起我的整个框架的UIScrollView跳 [英] iOS: setContentSize is causing my entire UIScrollView frame to jump
问题描述
有可能是一个简单的解决这个问题,我失踪,但我似乎无法找到病因。
问题:我每次打电话setContentSize我的滚动视图,它使整个滚动视图帧转移。
问:为什么它的位置每次都重设setContentSize叫?以及如何得到它停止?
的注:的
- 滚动视图中的contentOffSet是罚款。这是整个
滚动视图帧跳跃到其原来的位置。 - 滚动视图是为了向上和向下按钮preSS,露出了里面的UIView的。
- 这工作得很好,但在打开一个单元格时,和CollapseClick本身(滚动视图)调用setContentSize,整个滚动视图跳回了prematurely - 任何意见将是AP preciated。谢谢你。
布局:
- 简单的布局:1滚动视图(全屏),为的UIView 1容器(身高:120点)的出现和消失的滚动型上下移动。
MasterView.m(部分)
- (无效){showPostShout
的CGRect newCCFrame = myCollapseClick.frame; //< ---- myCollapseClick是的UIScrollView 如果(!postShoutOpen){
newCCFrame.origin.y + = 120;
[UIView的animateWithDuration:0.4延迟:0选项:UIViewAnimationOptionCurveEaseInOut动画:^ {
self.postShoutContainer.alpha = 1;
myCollapseClick.frame = newCCFrame; }完成:^(BOOL完){
的NSLog(@完了!);
}];
}其他{
newCCFrame.origin.y - = 120;
[UIView的animateWithDuration:0.3延迟:0选项:UIViewAnimationOptionCurveEaseInOut动画:^ {
self.postShoutContainer.alpha = 0;
myCollapseClick.frame = newCCFrame;
}完成:^(BOOL完){
的NSLog(@finished2!);
}];
} postShoutOpen = postShoutOpen!;
}
CollapseableClick.m(违规部分?)
- (无效)repositionCollapseClickCellsBelowIndex:(INT)指数withOffset:(浮点){偏移
对于(INT YY =指数+ 1; YY< self.dataArray.count; YY ++){
CollapseClickCell *电池= [self.dataArray objectAtIndex:YY];
cell.frame = CGRectMake(cell.frame.origin.x,cell.frame.origin.y +偏移,cell.frame.size.width,cell.frame.size.height);
} //调整大小self.ContentSize
CollapseClickCell * lastCell = [self.dataArray objectAtIndex:self.dataArray.count - 1];
[个体经营setContentSize:CGSizeMake(self.frame.size.width,lastCell.frame.origin.y + lastCell.frame.size.height + kCCPad)];}
collapseableclick.m(整体)
//
// CollapseClick.m
// CollapseClick
//
//创建者本·戈登在13年2月28日。
//版权所有(C)2013本·戈登。版权所有。
//#进口CollapseClick.h
//#进口的UIScrollView + SVPullToRefresh.h@implementation CollapseClick
@synthesize CollapseClickDelegate;
- (ID)initWithFrame:方法(的CGRect)帧
{
自= [超级initWithFrame:方法框架]
如果(个体经营){
//初始化code
self.isClickedArray = [[NSMutableArray里的alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
self.dataArray = [[NSMutableArray里的alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
[个体经营reloadCollapseClick]
}
返回自我;
}
的#pragma马克 - 加载数据
- (无效){reloadCollapseClick
//设置:身高
浮totalHeight = 0; //如果数组没有Init'd,他们INIT
如果(!(self.isClickedArray)){
self.isClickedArray = [[NSMutableArray里的alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
} 如果(!(self.dataArray)){
self.dataArray = [[NSMutableArray里的alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
} //确保他们都清楚
[self.isClickedArray removeAllObjects]
[self.dataArray removeAllObjects] //删除所有子视图
对于(的UIView *在self.subviews子视图){
[子视图removeFromSuperview]
} //添加单元格
为(中间体XX = 0; XX&下; [CollapseClickDelegate numberOfCellsForCollapseClick]; XX ++){
//创建细胞
///添加委托方法同意/不同意在这里辩手
CollapseClickCell *电池= [CollapseClickCell newCollapseClickCellWithTitle:[CollapseClickDelegate titleForCollapseClickAtIndex:XX]统计:[CollapseClickDelegate statsForCollapseClick:XX]指数:XX内容:[CollapseClickDelegate viewForCollapseClickContentViewAtIndex:XX]];
//设置cell.TitleView的的backgroundColor
如果([(ID)CollapseClickDelegate respondsToSelector:@selector(colorForCollapseClickTitleViewAtIndex :)]){
cell.TitleView.backgroundColor = [CollapseClickDelegate colorForCollapseClickTitleViewAtIndex:XX];
}
其他{
cell.TitleView.backgroundColor = [的UIColor colorWithWhite:0.4阿尔法:1.0];
}
//设置cell.TitleLabel的颜色
如果([(ID)CollapseClickDelegate respondsToSelector:@selector(colorForTitleLabelAtIndex :)]){
cell.TitleLabel.textColor = [CollapseClickDelegate colorForTitleLabelAtIndex:XX];
}
其他{
cell.TitleLabel.textColor =的UIColor whiteColor]
}
//设置cell.TitleArrow的颜色
如果([(ID)CollapseClickDelegate respondsToSelector:@selector(colorForTitleArrowAtIndex :)]){
[cell.TitleArrow drawWithColor:[CollapseClickDelegate colorForTitleArrowAtIndex:XX]];
}
其他{
[cell.TitleArrow drawWithColor:[的UIColor colorWithWhite:0.0阿尔法:0.35];
} //设置cell.ContentView大小
cell.ContentView.frame = CGRectMake(0,kCCHeaderHeight + kCCPad,self.frame.size.width,cell.ContentView.frame.size.height); //设置单元格的大小
cell.frame = CGRectMake(0,totalHeight,self.frame.size.width,kCCHeaderHeight);
//添加目标按钮
[cell.TitleButton addTarget:自我行动:@选择(didSelectCollapseClickButton :) forControlEvents:UIControlEventTouchUpInside]; //添加细胞
[个体经营addSubview:电池] //添加到DataArray中&安培; isClickedArray
[self.isClickedArray ADDOBJECT:[NSNumber的numberWithBool:否]];
[self.dataArray ADDOBJECT:电池] //计算totalHeight
totalHeight + = kCCHeaderHeight + kCCPad;
}
//设置自我的ContentSize和ContentOffset
[个体经营setContentSize:CGSizeMake(self.frame.size.width,totalHeight)];
[个体经营setContentOffset:CGPointZero];
[NSNotificationCenter defaultCenter] postNotificationName:@CollapseClickUpdated对象:个体经营];
}的#pragma马克 - 细胞重新定位
- (无效)repositionCollapseClickCellsBelowIndex:(INT)指数withOffset:(浮点){偏移
对于(INT YY =指数+ 1; YY< self.dataArray.count; YY ++){
CollapseClickCell *电池= [self.dataArray objectAtIndex:YY];
cell.frame = CGRectMake(cell.frame.origin.x,cell.frame.origin.y +偏移,cell.frame.size.width,cell.frame.size.height);
} //调整大小self.ContentSize
CollapseClickCell * lastCell = [self.dataArray objectAtIndex:self.dataArray.count - 1];
[个体经营setContentSize:CGSizeMake(self.frame.size.width,lastCell.frame.origin.y + lastCell.frame.size.height + kCCPad)];}
的#pragma马克 - 难道点击
- (无效)didSelectCollapseClickButton:(UIButton的*)titleButton {
BOOL isOpen会= NO; //小区是开放的 - >关闭
如果([self.isClickedArray objectAtIndex:titleButton.tag] boolValue] == YES){
[个体经营closeCollapseClickCellAtIndex:titleButton.tag动画:YES];
}
//细胞是CLOSED - >打开
其他{
[个体经营openCollapseClickCellAtIndex:titleButton.tag动画:YES];
isOpen会= YES;
} //调用委托方法
如果([(ID)CollapseClickDelegate respondsToSelector:@selector(didClickCollapseClickCellAtIndex:isNowOpen :)]){
[CollapseClickDelegate didClickCollapseClickCellAtIndex:titleButton.tag isNowOpen:isOpen会];
}
}的#pragma马克 - 打开CollapseClickCell
- (无效)openCollapseClickCellAtIndex:(INT)指数动画:(BOOL)动画{
//检查如果它不先打开
如果([self.isClickedArray objectAtIndex:指数] boolValue] = YES!){
漂浮时间= 0;
如果(动画){
持续时间= 0.25;
}
[UIView的animateWithDuration:持续时间的动画:^ {
//调整细胞
CollapseClickCell *电池= [self.dataArray objectAtIndex:指数]
cell.frame = CGRectMake(cell.frame.origin.x,cell.frame.origin.y,cell.frame.size.width,cell.ContentView.frame.origin.y + cell.ContentView.frame.size.height + kCCPad); //改变方向箭头
CGAffineTransform变换= CGAffineTransformMakeRotation(M_PI / 2);
cell.TitleArrow.transform =变换; //改变isClickedArray
[self.isClickedArray replaceObjectAtIndex:指数withObject:[NSNumber的numberWithBool:YES]; //下面的重新定位单元中所有CollapseClickCells
[个体经营repositionCollapseClickCellsBelowIndex:指数withOffset:cell.ContentView.frame.size.height + kCCPad];
}];
}
} - (无效)openCollapseClickCellsWithIndexes:(NSArray的*)indexArray动画:(BOOL)动画{
//这工作了NSNumbers每个索引
为(中间体二= 0; II蛋白酶indexArray.count;ⅱ++){
编号IndexID为= indexArray [Ⅱ];
如果([IndexID为isKindOfClass:[NSNumber的类]){
[个体经营openCollapseClickCellAtIndex:[IndexID为的intValue]动画:动画]
}
}}的#pragma马克 - 关闭CollapseClickCell
- (无效)closeCollapseClickCellAtIndex:(INT)指数动画:(BOOL)动画{
//检查它的开放第一
如果([self.isClickedArray objectAtIndex:指数] boolValue] == YES){
漂浮时间= 0;
如果(动画){
持续时间= 0.25;
}
[UIView的animateWithDuration:持续时间的动画:^ {
//调整细胞
CollapseClickCell *电池= [self.dataArray objectAtIndex:指数]
cell.frame = CGRectMake(cell.frame.origin.x,cell.frame.origin.y,cell.frame.size.width,kCCHeaderHeight); //改变方向箭头
CGAffineTransform变换= CGAffineTransformMakeRotation(0);
cell.TitleArrow.transform =变换; //改变isClickedArray
[self.isClickedArray replaceObjectAtIndex:指数withObject:[NSNumber的numberWithBool:NO]]; //下面的重新定位单元中所有CollapseClickCells
[个体经营repositionCollapseClickCellsBelowIndex:指数withOffset:-1 *(cell.ContentView.frame.size.height + kCCPad)];
}];
}
} - (无效)closeCollapseClickCellsWithIndexes:(NSArray的*)indexArray动画:(BOOL)动画{
//这工作了NSNumbers每个索引
为(中间体二= 0; II蛋白酶indexArray.count;ⅱ++){
编号IndexID为= indexArray [Ⅱ];
如果([IndexID为isKindOfClass:[NSNumber的类]){
[个体经营closeCollapseClickCellAtIndex:[IndexID为的intValue]动画:动画]
}
}
}
的#pragma马克 - CollapseClickCell索引
- (CollapseClickCell *)collapseClickCellForIndex:(INT){指数
如果([self.dataArray objectAtIndex:指数] isKindOfClass:[CollapseClickCell类]){
返回[self.dataArray objectAtIndex:指数]
} 回零;
}
的#pragma马克 - 滚动细胞
- (无效)scrollToCollapseClickCellAtIndex:(INT)指数动画:(BOOL)动画{
CollapseClickCell *电池= [self.dataArray objectAtIndex:指数]
[个体经营setContentOffset:CGPointMake(cell.frame.origin.x,cell.frame.origin.y)动画:动画]
}
的#pragma马克 - Cell的内容查看
- (UIView的*)contentViewForCellAtIndex:(INT){指数
CollapseClickCell *电池= [self.subviews objectAtIndex:指数]
返回cell.ContentView;
}@结束
有一个简单的解决方案:关闭自动布局
对于我来说,我没有把它关掉了我的整个故事板,只是我在加载的笔尖。(打算用来作为整个网站的小部件。)问题解决了。
在WWDC 2012的视频会话228 - 为掌握自动布局的最佳实践。解释和解决这个问题,开始在30m45s
There is probably a simple solution to this problem that I'm missing, but I can't seem to find the cause.
Problem: Every time I call setContentSize on my scroll view, it causes the entire scrollview frame to shift.
Question: Why does its position reset every time setContentSize is called? and how do I get it to stop?
Notes:
- The contentOffSet within the Scrollview is fine. It's the entire scrollview frame that jumps to its original position.
- The scroll view is meant to move up and down with a button press, revealing the UIView underneath. -- This works fine, but when a cell is opened, and CollapseClick calls setContentSize on itself (the scrollview), the entire scrollview jumps back up prematurely
- Any advice would be appreciated. Thanks.
Layout:
- Simple Layout: 1 scrollview(full screen), 1 container for UIView(height: 120 point) that appears and disappears as the Scrollview moves up and down.
MasterView.m (portion)
-(void)showPostShout{
CGRect newCCFrame = myCollapseClick.frame;//<----myCollapseClick is the UIScrollView
if (!postShoutOpen) {
newCCFrame.origin.y += 120;
[UIView animateWithDuration:.4 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.postShoutContainer.alpha = 1;
myCollapseClick.frame= newCCFrame;
} completion: ^(BOOL finished){
NSLog(@"finished!");
}];
} else{
newCCFrame.origin.y -= 120;
[UIView animateWithDuration:.3 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.postShoutContainer.alpha = 0;
myCollapseClick.frame= newCCFrame;
} completion: ^(BOOL finished){
NSLog(@"finished2!");
}];
}
postShoutOpen = !postShoutOpen;
}
CollapseableClick.m (offending portion?)
-(void)repositionCollapseClickCellsBelowIndex:(int)index withOffset:(float)offset {
for (int yy = index+1; yy < self.dataArray.count; yy++) {
CollapseClickCell *cell = [self.dataArray objectAtIndex:yy];
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y + offset, cell.frame.size.width, cell.frame.size.height);
}
// Resize self.ContentSize
CollapseClickCell *lastCell = [self.dataArray objectAtIndex:self.dataArray.count - 1];
[self setContentSize:CGSizeMake(self.frame.size.width, lastCell.frame.origin.y + lastCell.frame.size.height + kCCPad)];
}
collapseableclick.m (whole)
//
// CollapseClick.m
// CollapseClick
//
// Created by Ben Gordon on 2/28/13.
// Copyright (c) 2013 Ben Gordon. All rights reserved.
//
#import "CollapseClick.h"
//#import "UIScrollView+SVPullToRefresh.h"
@implementation CollapseClick
@synthesize CollapseClickDelegate;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.isClickedArray = [[NSMutableArray alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
self.dataArray = [[NSMutableArray alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
[self reloadCollapseClick];
}
return self;
}
#pragma mark - Load Data
-(void)reloadCollapseClick {
// Set Up: Height
float totalHeight = 0;
// If Arrays aren't Init'd, Init them
if (!(self.isClickedArray)) {
self.isClickedArray = [[NSMutableArray alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
}
if (!(self.dataArray)) {
self.dataArray = [[NSMutableArray alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
}
// Make sure they are clear
[self.isClickedArray removeAllObjects];
[self.dataArray removeAllObjects];
// Remove all subviews
for (UIView *subview in self.subviews) {
[subview removeFromSuperview];
}
// Add cells
for (int xx = 0; xx < [CollapseClickDelegate numberOfCellsForCollapseClick]; xx++) {
// Create Cell
///add delegate methods for agree/disagree debaters here
CollapseClickCell *cell = [CollapseClickCell newCollapseClickCellWithTitle:[CollapseClickDelegate titleForCollapseClickAtIndex:xx] stats:[CollapseClickDelegate statsForCollapseClick:xx] index:xx content:[CollapseClickDelegate viewForCollapseClickContentViewAtIndex:xx]];
// Set cell.TitleView's backgroundColor
if ([(id)CollapseClickDelegate respondsToSelector:@selector(colorForCollapseClickTitleViewAtIndex:)]) {
cell.TitleView.backgroundColor = [CollapseClickDelegate colorForCollapseClickTitleViewAtIndex:xx];
}
else {
cell.TitleView.backgroundColor = [UIColor colorWithWhite:0.4 alpha:1.0];
}
// Set cell.TitleLabel's Color
if ([(id)CollapseClickDelegate respondsToSelector:@selector(colorForTitleLabelAtIndex:)]) {
cell.TitleLabel.textColor = [CollapseClickDelegate colorForTitleLabelAtIndex:xx];
}
else {
cell.TitleLabel.textColor = [UIColor whiteColor];
}
// Set cell.TitleArrow's Color
if ([(id)CollapseClickDelegate respondsToSelector:@selector(colorForTitleArrowAtIndex:)]) {
[cell.TitleArrow drawWithColor:[CollapseClickDelegate colorForTitleArrowAtIndex:xx]];
}
else {
[cell.TitleArrow drawWithColor:[UIColor colorWithWhite:0.0 alpha:0.35]];
}
// Set cell.ContentView's size
cell.ContentView.frame = CGRectMake(0, kCCHeaderHeight + kCCPad, self.frame.size.width, cell.ContentView.frame.size.height);
// Set cell's size
cell.frame = CGRectMake(0, totalHeight, self.frame.size.width, kCCHeaderHeight);
// Add target to Button
[cell.TitleButton addTarget:self action:@selector(didSelectCollapseClickButton:) forControlEvents:UIControlEventTouchUpInside];
// Add cell
[self addSubview:cell];
// Add to DataArray & isClickedArray
[self.isClickedArray addObject:[NSNumber numberWithBool:NO]];
[self.dataArray addObject:cell];
// Calculate totalHeight
totalHeight += kCCHeaderHeight + kCCPad;
}
// Set self's ContentSize and ContentOffset
[self setContentSize:CGSizeMake(self.frame.size.width, totalHeight)];
[self setContentOffset:CGPointZero];
[[NSNotificationCenter defaultCenter] postNotificationName:@"CollapseClickUpdated" object: self ];
}
#pragma mark - Reposition Cells
-(void)repositionCollapseClickCellsBelowIndex:(int)index withOffset:(float)offset {
for (int yy = index+1; yy < self.dataArray.count; yy++) {
CollapseClickCell *cell = [self.dataArray objectAtIndex:yy];
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y + offset, cell.frame.size.width, cell.frame.size.height);
}
// Resize self.ContentSize
CollapseClickCell *lastCell = [self.dataArray objectAtIndex:self.dataArray.count - 1];
[self setContentSize:CGSizeMake(self.frame.size.width, lastCell.frame.origin.y + lastCell.frame.size.height + kCCPad)];
}
#pragma mark - Did Click
-(void)didSelectCollapseClickButton:(UIButton *)titleButton {
BOOL isOpen = NO;
// Cell is OPEN -> CLOSED
if ([[self.isClickedArray objectAtIndex:titleButton.tag] boolValue] == YES) {
[self closeCollapseClickCellAtIndex:titleButton.tag animated:YES];
}
// Cell is CLOSED -> OPEN
else {
[self openCollapseClickCellAtIndex:titleButton.tag animated:YES];
isOpen = YES;
}
// Call delegate method
if ([(id)CollapseClickDelegate respondsToSelector:@selector(didClickCollapseClickCellAtIndex:isNowOpen:)]) {
[CollapseClickDelegate didClickCollapseClickCellAtIndex:titleButton.tag isNowOpen:isOpen];
}
}
#pragma mark - Open CollapseClickCell
-(void)openCollapseClickCellAtIndex:(int)index animated:(BOOL)animated {
// Check if it's not open first
if ([[self.isClickedArray objectAtIndex:index] boolValue] != YES) {
float duration = 0;
if (animated) {
duration = 0.25;
}
[UIView animateWithDuration:duration animations:^{
// Resize Cell
CollapseClickCell *cell = [self.dataArray objectAtIndex:index];
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, cell.ContentView.frame.origin.y + cell.ContentView.frame.size.height + kCCPad);
// Change Arrow orientation
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI/2);
cell.TitleArrow.transform = transform;
// Change isClickedArray
[self.isClickedArray replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]];
// Reposition all CollapseClickCells below Cell
[self repositionCollapseClickCellsBelowIndex:index withOffset:cell.ContentView.frame.size.height + kCCPad];
}];
}
}
-(void)openCollapseClickCellsWithIndexes:(NSArray *)indexArray animated:(BOOL)animated {
// This works off of NSNumbers for each Index
for (int ii = 0; ii < indexArray.count; ii++) {
id indexID = indexArray[ii];
if ([indexID isKindOfClass:[NSNumber class]]) {
[self openCollapseClickCellAtIndex:[indexID intValue] animated:animated];
}
}
}
#pragma mark - Close CollapseClickCell
-(void)closeCollapseClickCellAtIndex:(int)index animated:(BOOL)animated {
// Check if it's open first
if ([[self.isClickedArray objectAtIndex:index] boolValue] == YES) {
float duration = 0;
if (animated) {
duration = 0.25;
}
[UIView animateWithDuration:duration animations:^{
// Resize Cell
CollapseClickCell *cell = [self.dataArray objectAtIndex:index];
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, kCCHeaderHeight);
// Change Arrow orientation
CGAffineTransform transform = CGAffineTransformMakeRotation(0);
cell.TitleArrow.transform = transform;
// Change isClickedArray
[self.isClickedArray replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:NO]];
// Reposition all CollapseClickCells below Cell
[self repositionCollapseClickCellsBelowIndex:index withOffset:-1*(cell.ContentView.frame.size.height + kCCPad)];
}];
}
}
-(void)closeCollapseClickCellsWithIndexes:(NSArray *)indexArray animated:(BOOL)animated {
// This works off of NSNumbers for each Index
for (int ii = 0; ii < indexArray.count; ii++) {
id indexID = indexArray[ii];
if ([indexID isKindOfClass:[NSNumber class]]) {
[self closeCollapseClickCellAtIndex:[indexID intValue] animated:animated];
}
}
}
#pragma mark - CollapseClickCell for Index
-(CollapseClickCell *)collapseClickCellForIndex:(int)index {
if ([[self.dataArray objectAtIndex:index] isKindOfClass:[CollapseClickCell class]]) {
return [self.dataArray objectAtIndex:index];
}
return nil;
}
#pragma mark - Scroll To Cell
-(void)scrollToCollapseClickCellAtIndex:(int)index animated:(BOOL)animated {
CollapseClickCell *cell = [self.dataArray objectAtIndex:index];
[self setContentOffset:CGPointMake(cell.frame.origin.x, cell.frame.origin.y) animated:animated];
}
#pragma mark - Content View for Cell
-(UIView *)contentViewForCellAtIndex:(int)index {
CollapseClickCell *cell = [self.subviews objectAtIndex:index];
return cell.ContentView;
}
@end
There was a simple solution: Turn off Auto-layout.
For me, I didn't turn it off for my whole storyboard, just a nib I had loaded in. (intended to be used as a widget throughout the site.) Problem solved.
The WWDC 2012 video "Session 228 - Best Practices for Mastering Auto Layout" explains and addresses the problem, starting at 30m45s.
这篇关于iOS版:setContentSize引起我的整个框架的UIScrollView跳的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!