Ios UIScrollView不使用AutoLayout滚动
使用Autolayout时,我无法使UIScrollView垂直滚动,我尝试了许多建议。我读过苹果的,但即使这样,我的纯自动布局方法似乎也不起作用 下面是我的简单代码,其中我在容器视图中添加了两个UIView块1和2。正如许多在线参考文献所建议的那样,容器视图本身是UIScrollView的唯一子视图。我将块1和块2的高度分别设置为800点,但滚动视图不会滚动Ios UIScrollView不使用AutoLayout滚动,ios,objective-c,iphone,uiscrollview,autolayout,Ios,Objective C,Iphone,Uiscrollview,Autolayout,使用Autolayout时,我无法使UIScrollView垂直滚动,我尝试了许多建议。我读过苹果的,但即使这样,我的纯自动布局方法似乎也不起作用 下面是我的简单代码,其中我在容器视图中添加了两个UIView块1和2。正如许多在线参考文献所建议的那样,容器视图本身是UIScrollView的唯一子视图。我将块1和块2的高度分别设置为800点,但滚动视图不会滚动 - (void)viewDidLoad { [super viewDidLoad]; //
- (void)viewDidLoad {
[super viewDidLoad];
// Test UIScrollView with Autolayout, scrolling should word
UIView *mainView = self.view;
UIScrollView* scrollView = [UIScrollView new];
scrollView.translatesAutoresizingMaskIntoConstraints = NO;
scrollView.backgroundColor = [UIColor redColor];
[self.view addSubview:scrollView];
UIView* contentView = [UIView new];
contentView.translatesAutoresizingMaskIntoConstraints = NO;
contentView.backgroundColor = [UIColor greenColor];
[scrollView addSubview:contentView];
UIView* block1 = [[UIView alloc] init];
block1.translatesAutoresizingMaskIntoConstraints = NO;
[block1 setBackgroundColor:[UIColor blackColor]];
[contentView addSubview:block1];
UIView* block2 = [[UIView alloc] init];
block2.translatesAutoresizingMaskIntoConstraints = NO;
[block2 setBackgroundColor:[UIColor blackColor]];
[contentView addSubview:block2];
NSDictionary* viewDict = NSDictionaryOfVariableBindings(mainView,scrollView, contentView, block1, block2);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics:0 views:viewDict]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics:0 views:viewDict]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentView(==mainView)]|" options:0 metrics:0 views:viewDict]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView(==mainView)]|" options:0 metrics:0 views:viewDict]];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[block1(==300)]" options:0 metrics:0 views:viewDict]];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[block1(==800)]" options:0 metrics:0 views:viewDict]];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[block2(==300)]" options:0 metrics:0 views:viewDict]];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-810-[block2(==800)]" options:0 metrics:0 views:viewDict]];
}
从代码来看,内容视图的大小似乎与UIView的大小相同 e、 g:如果设备屏幕高度为568,则内容视图大小将为568,并且将块2设置为y位置=180 您的代码:
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView(==mainView)]|" options:0 metrics:0 views:viewDict]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView(2000)]|” options:0 metrics:0 views:viewDict]];
更改:
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView(==mainView)]|" options:0 metrics:0 views:viewDict]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView(2000)]|” options:0 metrics:0 views:viewDict]];
希望它能解决您的问题,如果有任何进一步的查询,请让我知道。如果您只想让滚动视图与自动布局一起工作,您可以试试这个。
在代码中执行以下更改
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView]|" options:0 metrics:0 views:viewDict]];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-810-[block2(==800)]|" options:0 metrics:0 views:viewDict]];
希望这有帮助首先,我将块y轴上的约束定义为
V:|[block1(=800)]-10-[block2(=block1)]
。至于滚动,我相信你需要在某处定义某个东西的框架。滚动视图的帧/边界为(0,0,0,0),即使在滚动视图中添加内容视图,并且在内容视图中添加块,这些边界仍然可以是(0,0,0,0),并且仍然满足您列出的约束。。。它只是将块添加到大小为(0,0)的UIView顶部。我会记录您的内容视图和滚动视图的边界,以确认我认为UIScrollView是使用自动布局的最差控件。如技术说明中所述,关键难点在于要求滚动视图中包含的内容的大小不依赖于滚动视图。换句话说,它不像一个普通的容器视图,在这个视图中,容器中的东西可以随着容器(以及设备大小)而膨胀或收缩。他们给出的示例使用具有固有大小的图像视图。我不认为这对实际应用有很大帮助。