Iphone 如何在iOS的ViewController中的其他视图下方添加视图?

Iphone 如何在iOS的ViewController中的其他视图下方添加视图?,iphone,ios,ios5,uiscrollview,Iphone,Ios,Ios5,Uiscrollview,在我的应用程序中,我正在创建视图控制器,其中混合了UILabel和UITextview,它们希望可以滚动,因为文本是动态的,并且也超过了垂直屏幕大小 我目前有Scrollview,它的子视图如下。视图是在Xcode 4.3情节提要中创建的 UILabel1(说标题) UITextView1(可以是任意大小的动态文本) UILabel2(第二标题) UITextView2(可以是任意大小的动态文本) 等等 问题是 当UITextView1有更多内容时,它就会与我不想要的UILabel2重叠 我希望

在我的应用程序中,我正在创建视图控制器,其中混合了
UILabel
UITextview
,它们希望可以滚动,因为文本是动态的,并且也超过了垂直屏幕大小

我目前有Scrollview,它的子视图如下。视图是在Xcode 4.3情节提要中创建的

UILabel1(说标题)

UITextView1(可以是任意大小的动态文本)

UILabel2(第二标题)

UITextView2(可以是任意大小的动态文本)

等等

问题是

UITextView1
有更多内容时,它就会与我不想要的
UILabel2
重叠

我希望将
UILabel1
放在scrollView的顶部,将
UITextView1
放在
UILabel1
的下方<代码>UILabel2在下面
UITextView1
等等

我要做什么才能做到这一点

编辑

情节提要

!![在此处输入图像描述][1]

在模拟器中

!![在此处输入图像描述][2]

谢谢你们的帮助。非常感谢

代码


}

在故事板或IB中,您可以自由地重新排列它们

在代码中,您可以在代码(在viewDidLoad中)中执行以下操作


请注意,您可以设置uiobjects的frame(和其他属性)并将其添加以便下降。

您可以告诉下一个视图从第一个视图的末尾开始,如下所示:

startYOfNextView = firstView.frame.origin.y position + firstView.frame.size.height;
对其他视图的其余部分执行相同的操作。如果视图的文本长度可变,则可能需要根据特定字体预先计算字符串的高度,例如:

CGSize maxSize = CGSizeMake(widthOfView, 9999999);
CGSize expectedSize = CGSizeMake(stringVar sizeWithFont:[UIFont fontWithName:@"Arial"] withMaxSize:maxSize lineBreakMode:UILineBreakModeWordWrap);
然后告诉动态视图使用expectedSize变量的高度,如下所示:

myDynamicView = [[UILabel alloc] initWithFrame:CGRectMake(..., expectedSize.height)];

您的问题是标签位于textview的顶部(重叠),对吗

在本例中,您正在动态修改textview的高度。如果只是为了显示,您可以将文本设置为numberOfLines=0的UILabel,而不是UITextview;当它添加到scrollview时,添加一个标签就可以了


您还需要修改其余视图的origin.y,以便正确对齐。例如,secondView.origin.y=firstView.origin.y+firstView.size.height+offset。同样,修改位于正上方视图的其余视图的原点。因此它的原点将位于前一个视图框架之外。

在我的例子中,我必须将它投影到父视图上,所以记住还有一点

- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview

我认为添加一个透明的UI按钮是最快的解决方案。您可以添加它一次,然后在需要禁用当前视图下的所有视图时显示/隐藏(假设“当前”视图(如弹出窗口)最后添加到superview)

声明一个实例变量
UIButton*\u parentdisablengoverlay
在弹出视图中,然后将其添加到其
init
layoutSubviews
方法中:

_parentDisablingOverlay = [[UIButton alloc] initWithFrame:CGRectMake(0,0, self.superview.frame.size.width, self.superview.frame.size.height)];
[self.superview insertSubview:_parentDisablingOverlay belowSubview:self];
_parentDisablingOverlay.hidden = true;
稍后,当您要显示弹出窗口并禁用以下所有内容时:

- (void) open {
   self.hidden = false;
   _parentDisablingOverlay.hidden = false;
}
与关闭并重新启用所有内容类似:

- (void) close {
    self.hidden = true;
    _parentDisablingOverlay.hidden = true;
}

谢谢你的回答。我想在
UIScrollView
如何实现中添加这些视图。。你的故事板中的所有视图都有效吗?故事板的左下角有一个箭头按钮,当您展开它时,可以在列表中看到您的UI元素。在scrollview中,列表中的位置越低,元素的位置就越高。所以你只需要按照你喜欢的方式重新排列它们。是的,所有的视图都在故事板中。我现在不能测试它,因为我现在家里没有mac电脑。我明天会测试它,让你知道。谢谢你的支持。+1hmm。。。真奇怪。如果你还想试试的话,你能上传你故事板的截图吗。。。。你说的“下”是指“下”,即当你有大量文本时,其他内容会被按下?我以为你说的是分层。谢谢你的回答。。我需要设置什么属性这是我的荣幸。。我写的不正确-不是属性,而是首选项。。可能是标签文本的阴影。。。或者标签文本(用于uilabel)、文本颜色、文本对齐方式等(无论您可以为IB设置什么,也可以通过代码设置),您是否同时使用xib(故事板)和代码?如果你单独使用这些东西会更好。您是否为所有视图设置了框架?您是否正确设置了scroll.contentSize?别忘了添加到下一个对象的帧上一个视图的大小+偏移量,就像上面的编辑代码一样是的,我正在使用xib和代码。。也许这就是问题所在。。用代码更新了我的问题,请检查并告诉我们
- (void) open {
   self.hidden = false;
   _parentDisablingOverlay.hidden = false;
}
- (void) close {
    self.hidden = true;
    _parentDisablingOverlay.hidden = true;
}