-
Notifications
You must be signed in to change notification settings - Fork 1.9k
[Bug] Label with IsVisible = false takes up space #10325
Comments
As a workaround I added the whole list, not just the label in the header, in a stacklayout, then the label disappears/appears as it should when |
I'm pretty sure this is the same as #10060. The problem isn't that the element continues to take up space; the problem is that the ListView isn't triggering a relayout when the contents change. |
Bump 2 months later? I'm not sure I agree that it's an issue with triggering a layout. The same behavior occurs even when Here's a workaround for anyone coming across this in the meantime. This workaround feels hackish but does the job. In my case, this is a <StackLayout Orientation="Vertical"
Spacing="8"
IsVisible="{Binding ShowFilterHeader}">
<StackLayout.Triggers>
<DataTrigger TargetType="StackLayout"
Binding="{Binding ShowFilterHeader}"
Value="false">
<Setter Property="HeightRequest" Value="0" />
</DataTrigger>
</StackLayout.Triggers>
...
</StackLayout> |
Another issue with Labels not being removed from the visual tree is: Xamarin.UITest will return those Labels when using the All() query operatory. Example: The following WaitForNoElement will produce an assertion error, because the label still exists in the visual tree although its IsVisible is false: app.WaitForNoElement(q => q
.All()
.Marked("MyScrollView")
.Descendant()
.Marked("SomeEntryInTheScrollView")
.Index(0)
.Descendant()
.Marked("SomeLabelWithIsVisibleEqualsFalse")) The only workaround I know of is to abandon WaitForNoElement and manually check whether Width and Height of that AppResult is zero. |
Description
I have a basic list view page with some items and a header template containing a
Label
. The header label's visibility is toggled (data binding) every time I tap any of the items. Even if the label'sIsVisible
is false it still takes up space.According to the docs this shouldn't happen: Setting IsVisible to false will remove the element from the visual tree. The element will no longer take up space in layouts or be eligle to receive any kind of input event.
Steps to Reproduce
With the attached sample code:
Expected Behavior
Tapping on the items toggles the visibility of the header label. When the label is not visible it does not take up any space.
Actual Behavior
The label is hidden and shown when the
IsVisible
property is toggled but it still takes up space whenIsVisible
is false.Basic Information
Screenshots
Reproduction Link
sample.zip
Workaround
Haven't been able to find something that works for me yet.
Some suggest wrapping the label in a
StackLayout
or aGrid
with a row withHeight="auto"
but that has its own problems. E.g. the label doesn't become visible directly on the first time it'sIsVisible
is set to true, only after flipping the screen back and forth it shows up. Seems related to #4424The text was updated successfully, but these errors were encountered: