ios – UIActionSheet更改UIScrollView的值

我遇到了我认为可能是个错误的东西,但我并不完全确定.所以我问你,以防你知道修复.

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

但是,当我使用UIAlertView时,这不会发生.如果没有解决此问题的方法,则alertview是我的备份解决方案.我更喜欢一个动作表,因为它更适合任务.

我希望那里有人知道可能导致这种情况的原因以及如何解决这个问题.

谢谢!

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

打开动作表的代码:

- (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);

(注意另一个TextField.frame将是新文本字段的位置.所以像40 – 80 – 120 – 160等等)

这是viewDidLoad :(我没有viewDidAppear或viewWillAppear)

- (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消息中设置UIScrollView的contentSize即可.

而不是

- (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 …

点赞