2017-02-22 6 views
0

Я создал приложение, используя проект Xamarin Forms PCL, который будет работать на Android, ios, Windows 10 и Windows 8.1.Xamarin Forms: Ошибка высоты прогона в IOS

В нем я использовал элемент управления progresbar, и для увеличения его высоты я сделал свой собственный рендерер.

В PCL-

using Xamarin.Forms; 

namespace MyProject.ViewModels 
{ 
    public class CustomProgressbar : ProgressBar 
    { 
    } 
} 

В IOS-

using CoreGraphics; 
using MyProject.iOS; 
using Xamarin.Forms; 
using Xamarin.Forms.Platform.iOS; 
using FISE.ViewModels; 

[assembly: ExportRenderer(typeof(CustomProgressbar), typeof(CustomProgressBarRenderer))] 
namespace MyProject.iOS 
{ 

    public class CustomProgressBarRenderer : ProgressBarRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<ProgressBar> e) 
     { 
      base.OnElementChanged(e); 
      Control.ProgressTintColor = Color.FromHex(Constant.Primarycolor).ToUIColor(); 
      Control.TrackTintColor = Color.FromHex(Constant.Secondary1Color).ToUIColor(); 

     } 
     public override void LayoutSubviews() 
     { 
      base.LayoutSubviews(); 
      var X = 1f; 
      var Y = 10.0f; 
      CGAffineTransform transform = CGAffineTransform.MakeScale(X, Y); 
      // this.Control.Transform = transform; 
      this.Transform = transform; 

      //this.ClipsToBounds = true; 
      //this.Layer.MasksToBounds = true; 

     } 
    } 
} 

Я использовал этот визуализатор для увеличения высоты ProgressBar. Во-первых, я попробовал this.Control.Transform = transform;, но я не работал для меня, тогда я попробовал this.Transform = transform;, тогда это сработало для меня.

Теперь у меня есть 5 progressbars Vertically Stacked один за другим.

  <Grid Padding="20,3,0,0" x:Name="RatingCountDisplayGrid" RowSpacing="23" ColumnSpacing="10" Grid.Row="0" Grid.Column="1"> 
       <Grid.RowDefinitions> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="Auto"/> 
       </Grid.ColumnDefinitions> 

       <local1:CustomProgressbar Grid.Row="0" Grid.Column="0" HeightRequest="20" x:Name="fiveStarRating" /> 
       <Label x:Name="fiveStarRatingCount" Grid.Row="0" Grid.Column="1" FontAttributes="Bold" FontSize="14" Style="{DynamicResource LabelNormal3}"></Label> 
       <local1:CustomProgressbar Grid.Row="1" Grid.Column="0" HeightRequest="20" x:Name="fourStarRating"/> 
       <Label x:Name="fourStarRatingCount" Grid.Row="1" Grid.Column="1" FontAttributes="Bold" FontSize="14" Style="{DynamicResource LabelNormal3}"></Label> 
       <local1:CustomProgressbar Grid.Row="2" Grid.Column="0" HeightRequest="20" x:Name="threeStarRating"/> 
       <Label x:Name="threeStarRatingCount" Grid.Row="2" Grid.Column="1" FontAttributes="Bold" FontSize="14" Style="{DynamicResource LabelNormal3}"></Label> 
       <local1:CustomProgressbar Grid.Row="3" Grid.Column="0" HeightRequest="20" x:Name="twoStarRating"/> 
       <Label x:Name="twoStarRatingCount" Grid.Row="3" Grid.Column="1" FontAttributes="Bold" FontSize="14" Style="{DynamicResource LabelNormal3}"></Label> 
       <local1:CustomProgressbar Grid.Row="4" Grid.Column="0" HeightRequest="20" x:Name="oneStarRating"/> 
       <Label x:Name="oneStarRatingCount" Grid.Row="4" Grid.Column="1" FontAttributes="Bold" FontSize="14" Style="{DynamicResource LabelNormal3}"></Label> 
      </Grid> 

Похож this-

enter image description here

Перед применения Transform свойства это выглядело совершенным, но после применения преобразования собственности две индикаторы выполнения выходит из родительского контейнера.

ответ

0

Здесь вы идете ... Попробуйте это решение:

protected override void OnElementChanged(
    ElementChangedEventArgs<Xamarin.Forms.ProgressBar> e) 
    { 
     base.OnElementChanged(e); 

     Control.ProgressTintColor = Color.FromHex("#01BC73").ToUIColor();// Color..FromHex("#254f5e").ToUIColor(); 
     Control.TrackTintColor = Color.White.ToUIColor(); 
     //Control.SetProgress(1, true); 

     //Control.Hidden = false; 
    } 

    public override CGSize SizeThatFits(CGSize size) 
    { 
     //size.Height = 100; 
     return base.SizeThatFits(size); 
    } 

    public override void LayoutSubviews() 
    { 
     //base.LayoutSubviews(); 

     //var X = 3.0f; 
     //var Y = 20.0f; // This changes the height 

     //CGAffineTransform transform = CGAffineTransform.MakeScale(X, Y); 
     //Control.Transform = transform; 

     //UpdateNativeWidget(); 
     CGAffineTransform transform = CGAffineTransform.MakeScale(1.27f, 80.0f); 
     transform.TransformSize(this.Frame.Size); 
     this.Transform = transform; 

    } 
+0

Пожалуйста, объясните свой ответ! – Mazz

+0

@NoumanUllah SiddiquI Где используется SizeThatFits? – Sonali

+0

@NoumanUllah SiddiquI Я пробовал, что высота увеличивается, но четыре из пяти контрольных баров вышли из родительского контейнера. – Sonali

Смежные вопросы