【问题标题】:Moving controls on screen when scroll view is affected滚动视图受到影响时在屏幕上移动控件
【发布时间】:2012-12-02 20:58:12
【问题描述】:

我正在开发一个应用程序。我有一个屏幕,上面有大约 15 个控件。按钮、UITextfields、Mapkit 和 UITextviews。文本视图位于屏幕底部。所以当我点击输入一个值时,我有一个滚动视图,可以像我想要的那样向上移动控件。现在我有 5 个控件(自定义按钮),我已经将它们放在屏幕上的特定 x、y 位置。它们被卡住了到屏幕。当我进入文本视图时,所有控件都会向上移动,但这些控件不会向上移动,因为它们被赋予了特殊的 x,y 位置。我也想让他们动起来。我该怎么做?我在想做一些数学运算,当每个控件移动时,它们也会移动某个“增量”。或者是否有任何简单的方法让滚动视图告诉选择这些“固定按钮”并将它们像任何其他控件一样向上移动。我有意义吗?如果您需要更多信息,请询问。谢谢..

这张照片显示了我正在尝试做的事情。所以有 4 个 UIbuttons 附加到屏幕上。我通过制作这样的 CGRect 将它们固定在屏幕上

CGRectMake(20, 72, 180, 43)
CGRectMake(200, 72, 180, 43)
CGRectMake(380, 72, 180, 43)

CGRectMake(90, 380, 180, 43)

粗体的矩形是我通过将它们固定到这些坐标来制作的。所以我点击第二个 Uitextview 和一个委托被解雇并向上移动所有控件。这包括 3 个矩形(不是粗体)和第一个 uitextivew 向上移动。我这样做是因为键盘在我输入数据时隐藏了第二个 uitextview。但是现在 UIBUTTONS (BOLDED Rectangles) 留在屏幕上。当我隐藏键盘时,应用程序屏幕正常。我如何使粗体矩形也随着非粗体矩形向上移动。

    ITMToggleButtonView *aOnToggleButton = [[ITMToggleButtonView alloc] initWithFrame:CGRectMake(495, 21, 80, 43)
                                                                           andIndex:3
                                                                           andTitle:@"Add On?"
                                                                           andState:NO];
aOnToggleButton.delegate = self;

...创建了另外 4 个自定义切换按钮

[self.scrollView addSubview:stToggleButton];
[self.scrollView addSubview:rdToggleButton];
[self.scrollView addSubview:ecToggleButton];
[self.scrollView addSubview:aOnToggleButton];
[self.scrollView addSubview:sCToggleButton];

编辑:解决方案。我添加了我在此处看到的自定义创建的切换按钮(粗体矩形),并将它们添加到我的滚动视图中。因此,当键盘出现时,滚动视图会向上移动,我的所有控件(粗体和非粗体)也会向上移动。这是一个简单的修复。

【问题讨论】:

  • @Rob。我添加了一个指向模型的链接,并解释了这个场景。请看一下。谢谢。

标签: ios uibutton scrollview move fixed


【解决方案1】:

解决此问题的最简单方法是确保一起滚动的所有控件都应该是同一子视图的子视图(在您的情况下,这听起来像 UIScrollView)。因此,如果键盘出现时正在移动的非粗体控件位于UIScrollView 上,那么您应该将粗体控件放在同一个子视图上,例如与其他控件相同的UIScrollView

不过,我认为您已经向UIScrollView 添加了一些控件(也许您正在以编程方式添加它们)而其他的没有(也许您通过Interface Builder 添加它们)是有某些原因的。您需要解释为什么滚动视图的子视图和其他子视图不是的逻辑。与往常一样,共享有意义的 sn-ps 代码会有所帮助。抽象地诊断这类问题几乎是不可能的。

底线,听起来问题不是您用于添加粗体控件的CGRect 坐标,而是您将它们作为子视图添加到哪个视图。我们可以尝试通过滚动视图同步各种“非移动”控件的坐标变化动画,但这会有点笨拙,最好将它们全部放在同一个子视图上。

【讨论】:

  • 感谢您的解释。所有的控件都是scrollview的子视图,粗体的除外。我正在以编程方式创建它们,它们应该在那个精确的位置。其余控件我从 IB 添加。我解决了我的问题。当键盘被击中时,我在循环子视图时得到粗体控件并创建一个新的 CGRect。当键盘被隐藏时,我循环它们并将控件移动到原始位置。我将在我的问题中添加编辑如何我做到了。我会看看我的同事是否会暂时同意这种方法。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 2017-07-31
相关资源
最近更新 更多