gpt4 book ai didi

ios - UIActionSheet 更改 UIScrollView 的值

转载 作者:可可西里 更新时间:2023-11-01 05:54:03 25 4
gpt4 key购买 nike

我遇到过我认为可能是错误的问题,但我不完全确定。所以我问你是否知道修复方法。

基本上我有一个 UIScrollView,它根据 UITextFields 的数量动态改变大小。它以一个大小(一个文本字段)开始,然后随着添加更多, ScrollView 的内容大小增加。这很好用。但是,当用户点击打开 UIActionSheet 的按钮时,contentsize 设置为 0。这使得 scrollview 在他稍后关闭 actionsheet 时不可滚动。我放置了一个 NSLog 语句来检查呈现操作表之前和之后 ScrollView 的内容大小,它从任何值(例如 360)变为 0。

但是,当我改用 UIAlertView 时,这不会发生。如果没有解决此问题的方法,警报 View 是我的备用解决方案。不过,我更喜欢操作表,因为它更适合任务。

我希望外面有人知道是什么原因造成的,以及我该如何解决。

谢谢!

根据要求,这里有一些相关代码:

打开操作表的代码:

- (IBAction)addImage:(id)sender {
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Take a picture", @"Choose from photo album", nil];
[actionSheet showInView:self.view];
}

这是我在添加新文本字段后编辑 scrollView 值的方法:

CGFloat width = self.scrollView.bounds.size.width;
CGFloat height = CGRectGetMaxY(anotherTextField.frame);
self.scrollView.contentSize = CGSizeMake(width, height);

(注意 anotherTextField.frame 将是新文本字段的位置。所以类似于 40 - 80 - 120 - 160 等)


这是 viewDidLoad:(我没有 viewDidAppearviewWillAppear)

- (void)viewDidLoad {
[super viewDidLoad];

CGFloat width = self.scrollView.bounds.size.width;
CGFloat height = CGRectGetMaxY(self.textField2.frame);
self.scrollView.contentSize = CGSizeMake(width, height);
}

最佳答案

UIScrollView 的 contentSize 可能是由 NSLayoutConstraint 设置的。然后 UIActionSheet 导致约束“刷新”...

编辑:

注意到界面生成器中的任何警告了吗?它通常会告诉您约束何时无法为 UIScrollView 找到可用的内容大小。这实际上是一个相当复杂的问题,这个特定问题与 UIScrollView 和约束有关。我通常通过代码来做到这一点。

这里最好的方法是,当您通过代码设置 contentSize 时,只需在 UIViewController-( void)viewDidLayoutSubviews 消息。

所以代替

- (void)viewDidLoad 
{
[super viewDidLoad];

CGFloat width = self.scrollView.bounds.size.width;
CGFloat height = CGRectGetMaxY(self.textField2.frame);
self.scrollView.contentSize = CGSizeMake(width, height);
}

像这样:

- (void)viewDidLoad 
{
[super viewDidLoad];

// Any other code here...
}

- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];

CGFloat width = self.scrollView.bounds.size.width;
CGFloat height = CGRectGetMaxY(self.textField2.frame);
self.scrollView.contentSize = CGSizeMake(width, height);
}

或者作为最后的手段以同样的方式覆盖updateViewConstraints...

关于ios - UIActionSheet 更改 UIScrollView 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23943515/

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