2011-08-01 36 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

現在你的最後一條評論真的很有吸引力... –