UIActionSheet更改UIScrollView的值

时间:2014-05-29 21:42:27

标签: ios uiscrollview uiactionsheet

我遇到了我认为可能是个错误的内容,但我并不完全确定。所以,如果你知道修复,我会问你。

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

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

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

谢谢!

根据要求,以下是一些相关代码:

打开操作表的代码:

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

1 个答案:

答案 0 :(得分:2)

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

修改

注意界面构建器中的任何警告?它通常会告诉您约束何时能够找到UIScrollView的可用内容大小。它实际上是一个非常复杂的问题,这个特定问题包含UIScrollView和约束。我通常通过代码来做到这一点。

此处的最佳方式是,无论如何,通过代码设置contentSize,只需在UIScrollView UIViewController中设置- (void)viewDidLayoutSubviews的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 ......