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