2011-08-01 37 views
0

从上到下我有UIView,UIScrollView,UIImage,UILabel,UITextView和UIButton。uiscrollview滚动非常非常高的页面

我最顶级的UIScrollView背后的原因是整个垂直内容会滚动。

我真的需要替代的是UITextView(第5下),因为UITextView是UIScrollView的子类。而这个替代品必须适应非常高的格式化文本列。

我不想要的是页面中间的可滚动对象;我希望整个页面都可以滚动。

还有一件事...请注意,这个高大的文本列下面有一个按钮。

约翰爱

回答

1

谢谢! Ashack和Pentagp。我想我最终不得不放弃想法,IB可以用于所有GUI ...

整个UIView包含一个UILabel,一个UIImage,一个UITextView和一个UIButton在底部。

这里的目标是使整个内容可以滚动。

感谢你们在stackoverflow.com:

  1. 使用IB,取消选中 “启用滚动” 为UITextView的
    ,因为它是使用IB,拖UIScrollView的
  2. 的具体类型一个UIScrollView的UIView和匹配大小和 确保UIScrollView包围所有的子视图使得UITextView的高度=其contentSize。高度
  3. 招UIButton的下面这个UITextView的

,然后,由于iphonedevsdk.com:

  1. 调整最顶层的UIScrollView的contentSize.height到 包括重新定位的UIButton的高度

问题解决!!!

0

你的问题不是很具体,但我觉得你问如何使不滚动文本视图,并扩展以适合文本。你可以用UILabel来做到这一点,但这是一个多步骤的过程。如果禁用滚动并将contentSize设置为与框架尺寸相匹配,则对于UITextView同样适用。

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100,100,100,100)]; 
label.font = [UIFont systemFontOfSize:24]; 
NSString *yourTextString = @"your text"; 
CGSize maximumLabelSize = CGSizeMake(100, 500); 
CGSize expectedLabelSize = [yourTextString sizeWithFont:label.font 
        constrainedToSize:maximumLabelSize 
        lineBreakMode:yourLabel.lineBreakMode]; 
CGRect labelFrame = label.frame; 
labelFrame.size.width = expectedLabelSize.width; 
labelFrame.size.height = expectedLabelSize.height; 
label.frame = labelFrame; 

然后从那里使用标签的框架来设置按钮及其下面的所有元素的位置。

+0

我正在使用带有10个不同的UIViewControllers的Tab Controller App。所有10个都有一个超级视图,它为每件事提供实例方法,这些方法基于我在每个IO中为IB设置的标签ID。我的最终目标是制作超长可滚动UIView(带有图像,文本和按钮)对于每个UIViewController以及要在IB内设置的UIView的内容。我可能无法避免它,但我想避免以编程方式设置每个UIView的内容 –

+0

好吧,如果你想要实现这种液体布局,你需要以编程方式进行,除非你可以使用UIWebView和HTML/CSS为您的内容。恐怕你必须使用我的答案并使用我上面描述的方法以编程方式调整布局,从具有可变高度的第一个元素开始。 – ashack

+0

刚刚有另一个想法(基于StackOverflow的另一位读者......如何在项目中嵌入样式化文本文件并将其加载到UIView中......可以在一个位置完成所有操作,即我的超级视图viewDidLoad,因为我的UIView的-viewDidLoad只是在它调用我的超级视图的-viewDidLoad之前做了一件事,并且一件事是以NSString的形式分配一个唯一的viewControllerID * –

1

如果我明白你的问题,你不想嵌套滚动。 因此设置yourTextView.scrollEnabled = NO; //编程我们做它在笔尖

另外为了显示所有文本设置yourTextView框架高度与其内容高度:

yourTextView.frame = CGRectMake(yourTextView.frame.origin.x, 
            yourTextView.frame.origin.y, 
            yourTextView.frame.size.width, 
            yourTextView.contentSize.height + (yourTextView.contentSize.width > yourTextView.frame.size.width ? (yourTextView.contentSize.width * yourTextView.contentSize.height/(yourTextView.contentSize.width - yourTextView.frame.size.width)) - yourTextView.contentSize.height :0))); 

/* 
If textView is dynamically filled, you have to check if yourTextView.contentSize.width is bigger than yourTextView.frame.size.width then add proportionally what is remaining to the height. 
*/ 

在结束更改按钮的位置,如果需要:

yourbutton.frame = CGRectMake(yourbutton.frame.origin.x, 
           yourTextView.frame.origin.y + yourTextView.frame.size.height + 20, //If you want your button to be 20 point after your textView 
           yourbutton.frame.size.width, 
           yourbutton.frame.size.height); 

希望能帮到你...

+0

我正在使用一个Tab控制器应用程序,它有10个不同的UIViewControllers。 10有一个超级视图,它提供了基于按钮标签ID的所有事件的实例方法,我已经在IB中为每一个都设置了10.我的最终目标是制作一个超长的可滚动UIView(带有图像,文本和按钮)对于每个UIViewController和该UIView的内容在IB中设置我可能无法避免它,但我想避免以编程方式设置每个UIView的内容 –

+0

不能哟ur superview有一个管理布局的方法:展开UITextView的子视图并翻译后面的子视图。 当你的视图控制器viewDidLoad被调用时,调用layoutManagement方法。 – Pentagp

+0

现在你的最后一条评论真的很有吸引力... –