gpt4 book ai didi

iphone - ScrollView 的 iOS AutoLayout 问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:30 26 4
gpt4 key购买 nike

你好,我遇到了 UIScrollViewModalViewController 的自动布局问题。以下是我的编码步骤作为示例代码:

1) 我有一个 UIViewController 和一个 UIScrollView 作为 subView

UIViewController *viewController = [[UIViewController alloc] init];
UIScrollView *scrollView = [[UIScrollView alloc] init];

scrollView.translatesAutoresizingMaskIntoConstraints = NO;
[viewController.view addSubview:scrollView];

UIView *superView = viewController.view;
NSDictionary *viewsDict = NSDictionaryOfVariableBindings(superView,scrollView);

[superView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView(==superView)]|"
options:0
metrics:nil
views:viewsDict]];
[superView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView(==superView)]|"
options:0
metrics:nil
views:viewsDict]];

这行得通

2) 我将 2 个 subview 添加到 scrollView

UIView *view1 = [[UIView alloc] init];
view1.backgroundColor = [UIColor redColor];
view1.translatesAutoresizingMaskIntoConstraints = NO;
[scrollView addSubview:view1];


UIView *view2 = [[UIView alloc] init];
view2.backgroundColor = [UIColor greenColor];
view2.translatesAutoresizingMaskIntoConstraints = NO;
[scrollView addSubview:view2];

viewsDict = NSDictionaryOfVariableBindings(scrollView,view1,view2);


[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view1(==scrollView)]|"
options:0
metrics:nil
views:viewsDict]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view2(==scrollView)]|"
options:0
metrics:nil
views:viewsDict]];

[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view1(180)][view2(==scrollView)]|"
options:0
metrics:nil
views:viewsDict]];


UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"open" forState:UIControlStateNormal];
btn.frame = CGRectMake(10, 10, 100, 100);
[view2 addSubview:btn];
[btn addTarget:self action:@selector(openPopOver) forControlEvents:UIControlEventTouchUpInside];

这也很好用

3) 我滚动到只能看到 view2 的内容偏移 y 180

[scrollView setContentOffset:CGPointMake(0, 180) animated:YES];

4) 我在 `ViewController

上打开一个 ModalViewController
- (void)openModal{
UIViewController *viewController = [[UIViewController alloc] init];

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"close" forState:UIControlStateNormal];
btn.frame = CGRectMake(10, 10, 100, 100);
[viewController.view addSubview:btn];
[btn addTarget:self action:@selector(closePopOver) forControlEvents:UIControlEventTouchUpInside];


[self presentViewController:viewController animated:YES completion:nil];

5) 当我关闭 ModalViewController 时,我在 scrollView 上的布局不起作用,它滚动到我未设置的不同内容偏移量。当我将内容偏移量重置为 y 180 时, ScrollView 的内容大小是错误的。

- (void)closeModal{
[self dismissViewControllerAnimated:YES completion:^{

}];

我希望有人能帮我解决这个问题。

最佳答案

我认为这可能是 iOS 自动布局 wrt UIScrollViews 中的错误。我只是在我的情况下遇到了类似的问题,我会推送到详细 View ,然后返回到 UIScrollView 的主视图。 ScrollView 中的内容将向上移动。将 ScrollView 滚动到顶部,然后再次按下和弹出,一切都会被正确重置。

我什至尝试使用 UIScrollView 而不是 table view 作为 master 的开箱即用的 master detail 应用程序,并且能够证明这个缺陷。

Table views和Collection views好像没有这个问题。

关于iphone - ScrollView 的 iOS AutoLayout 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12509265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com