2016-01-04 48 views
0

我想要實現:的ListView頁面沒有搞亂滾動

--- Stack Layout/Relative Layout--- 
- some widget (e.g. Label)   - 
- some widget (e.g. Label)   - 
- ListView       - 
------------------------------------- 

不過,我也希望下面的滾動行爲:
頂部的小部件消失第一則ListView控件開始滾動。基本上,我想要一個「自然」的滾動行爲。我能實現這個

一種方法是使整個頁面ListView和把小部件的標題爲ListView

但是,有一個問題......我認爲這是在Xamarin.Forms一個bug :

如果你有一個很長的標籤(還有什麼可以保存文本?),它不會顯示全部。它實際上會使其可滾動,並且一次只顯示其中的一部分。更糟糕的是,你不能容易地滾動標籤,你必須多次嘗試滾動標籤而不是頁面,這顯然是錯誤的。即使頁面本身已達到最終狀態(即無法再滾動),也會發生這種情況,Label仍然無法輕鬆滾動。

是否有另一種方法或解決方法來實現我想要的?

+0

我會堅持用頭理念和對listview set hasunevenrows = true並將您的標籤高度硬編碼爲足夠大以顯示整個標籤。滾動視圖中的滾動視圖可能有奇怪的行爲,我通常會避免它們。 – Slepz

+0

但我怎麼會知道文本所需的高度?我想也許我可以根據文本計算出來,或者渲染後有更好的方法(比如設置一個短計時器或渲染觸發器)。 –

+0

它可能工作,如果你只是將hasunevenrows設置爲true。替代方案會忘記列表視圖,並在滾動視圖中創建堆棧佈局。當你決定選擇什麼時,這可能會讓事情變得更加困難,但是,在這個 – Slepz

回答

1

正如其中一條評論所暗示的,最好的辦法是將Label的HeightRequest設置爲所需的值。 這裏是我如何衡量Android上的文本的高度(你需要DependencyService,如果你想打電話從Xamarin.Forms此功能):

double measureString(string text, string font, double fontSize, double width) 
    { 
     var textView = new TextView(global::Android.App.Application.Context); 
     textView.Typeface = Android.Graphics.Typeface.Create(font, Android.Graphics.TypefaceStyle.Normal); 
     textView.SetText(text, TextView.BufferType.Normal); 
     textView.SetTextSize(Android.Util.ComplexUnitType.Px, (float)(fontSize * Xamarin.Forms.Forms.Context.Resources.DisplayMetrics.ScaledDensity)); 
     int widthMeasureSpec = Android.Views.View.MeasureSpec.MakeMeasureSpec((int)(width * Xamarin.Forms.Forms.Context.Resources.DisplayMetrics.Density), width == 0 ? Android.Views.MeasureSpecMode.Unspecified : Android.Views.MeasureSpecMode.Exactly); 
     int heightMeasureSpec = Android.Views.View.MeasureSpec.MakeMeasureSpec(0, Android.Views.MeasureSpecMode.Unspecified); 
     textView.Measure(widthMeasureSpec, heightMeasureSpec); 
     textView.SetIncludeFontPadding(false); 
     return (width == 0 ? textView.MeasuredWidth : textView.MeasuredHeight)/Xamarin.Forms.Forms.Context.Resources.DisplayMetrics.Density; 
    } 
+1

這是我甚至不知道我想要的代碼。這很漂亮。 – Slepz

+0

謝謝!我不知道我怎麼沒有回覆這個,我想我沒有注意到它。你知道我將如何得到Xamarin使用的字體名稱嗎? –

+0

Xamarin.Forms的默認值是一個空字符串。在Android上,我認爲它是用iOS上的Roboto取代 - Helvetica – Grisha