Reputation: 930
I'm trying to rotate some labels in xamarin forms but there are some problems. If i rotate a single label the text will trim and there will be only some letters visible, i putted every label inside a stacklayout and i rotated the stacklayout itself with -90 degree as the code below
<StackLayout Spacing="0"
Rotation="-90"
VerticalOptions="Start"
HorizontalOptions="End">
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
<Label Text="ABCDE" TextColor="Black"/>
</StackLayout>
the labels are rotated correctly, no text is trimmed. the problem is now that the VerticalOptions
or HorizontaOptions
of the stacklayout are not working properly. When i set the VerticalOption
to "Start" it will show everything not in the top but somehow 25% from the top. The HorizontalOptions
has another issue when i set it to "Start" or "End" like the image below:
Can anyone please help how to solve this issue, or if there is a better way of doing this? Thanks in advance
Upvotes: 0
Views: 1990
Reputation: 1050
I agree with Lucas's answer, using margins is a valid solution.
Perhaps you should look into RelativeLayout? A RelativeLayout can be used to position views on screen, relative to the overall layout or to other views.
Note: Because of the way constraints are defined, it is possible to make more complex layouts in C# than can be specified with XAML.
Some useful links
Here is a sample I tossed together using XAML.
<RelativeLayout>
<Label
RelativeLayout.XConstraint="{ConstraintExpression Type=Constant,Property=X, Factor=0, Constant=-30}"
RelativeLayout.YConstraint="{ConstraintExpression Type=Constant,Property=Y, Factor=0, Constant=25}"
BackgroundColor="Green"
Rotation="-90"
Text="Hello World"
TextColor="White"
/>
<Label
RelativeLayout.XConstraint="{ConstraintExpression Type=Constant,Property=X, Factor=0, Constant=-10}"
RelativeLayout.YConstraint="{ConstraintExpression Type=Constant,Property=Y, Factor=0, Constant=25}"
BackgroundColor="Blue"
Rotation="-90"
Text="Hello World"
TextColor="White"
/>
<Label
RelativeLayout.XConstraint="{ConstraintExpression Type=Constant,Property=X, Factor=0, Constant=10}"
RelativeLayout.YConstraint="{ConstraintExpression Type=Constant,Property=Y, Factor=0, Constant=25}"
BackgroundColor="Red"
Rotation="-90"
Text="Hello World"
TextColor="White"
/>
<Label
RelativeLayout.XConstraint="{ConstraintExpression Type=Constant,Property=X, Factor=0, Constant=55}"
RelativeLayout.YConstraint="{ConstraintExpression Type=Constant,Property=Y, Factor=0, Constant=18}"
BackgroundColor="Green"
Rotation="-90"
Text="123456"
TextColor="White"
/>
<Label
RelativeLayout.XConstraint="{ConstraintExpression Type=Constant,Property=X, Factor=0, Constant=75}"
RelativeLayout.YConstraint="{ConstraintExpression Type=Constant,Property=Y, Factor=0, Constant=120}"
BackgroundColor="Green"
Rotation="-180"
Text="ABC DEF GHI"
TextColor="White"
/>
<Label
RelativeLayout.XConstraint="{ConstraintExpression Type=Constant,Property=X, Factor=0, Constant=120}"
RelativeLayout.YConstraint="{ConstraintExpression Type=Constant,Property=Y, Factor=0, Constant=200}"
BackgroundColor="Green"
Rotation="45"
Text="JKL MNO PQR"
TextColor="White"
/>
<Label
RelativeLayout.XConstraint="{ConstraintExpression Type=Constant,Property=X, Factor=0, Constant=320}"
RelativeLayout.YConstraint="{ConstraintExpression Type=Constant,Property=Y, Factor=0, Constant=200}"
BackgroundColor="Green"
Rotation="-270"
Text="Aa Bb Cc Dd"
TextColor="White"
/>
<Label
RelativeLayout.XConstraint="{ConstraintExpression Type=Constant,Property=X, Factor=0, Constant=0}"
RelativeLayout.YConstraint="{ConstraintExpression Type=Constant,Property=Y, Factor=0, Constant=200}"
BackgroundColor="Blue"
Rotation="-90"
Text="Aa Bb Cc Dd"
TextColor="White"
/>
<Label
RelativeLayout.XConstraint="{ConstraintExpression Type=Constant,Property=X, Factor=0, Constant=0}"
RelativeLayout.YConstraint="{ConstraintExpression Type=Constant,Property=Y, Factor=0, Constant=200}"
BackgroundColor="Green"
Rotation="-70"
Text="Aa Bb Cc Dd"
TextColor="White"
/>
<Label
RelativeLayout.XConstraint="{ConstraintExpression Type=Constant,Property=X, Factor=0, Constant=0}"
RelativeLayout.YConstraint="{ConstraintExpression Type=Constant,Property=Y, Factor=0, Constant=200}"
BackgroundColor="Blue"
Rotation="-50"
Text="Aa Bb Cc Dd"
TextColor="White"
/>
<Label
RelativeLayout.XConstraint="{ConstraintExpression Type=Constant,Property=X, Factor=0, Constant=0}"
RelativeLayout.YConstraint="{ConstraintExpression Type=Constant,Property=Y, Factor=0, Constant=200}"
BackgroundColor="Green"
Rotation="-30"
Text="Aa Bb Cc Dd"
TextColor="White"
/>
</RelativeLayout>
Upvotes: 1
Reputation: 18861
Cause:
When you set the Rotation
,it will rotate around the center of itself.So there will some 'space' on the top of the screen .
Workaround:
You can set the margin of the StackLayout
.
<StackLayout Spacing="0"
Rotation="-90"
Margin="0,-130,0,0"
VerticalOptions="Start"
HorizontalOptions="Center">
...
</StackLayout>
And the result just like the following image.
Upvotes: 1