Flex: Verhindern, dass Scrollbar von Inhalten abdeckt, wenn automatisch angezeigt
-
08-07-2019 - |
Frage
Ich habe eine Leinwand in Flex in der Lage sein werden, nur in vertikaler Richtung gescrollt werden, so dass ich die Attribute der Leinwand wie folgt:
verticalScrollPolicy="auto" horizontalScrollPolicy="off"
Das Problem hierbei ist, dass die vertikale Bildlaufleiste den Inhalt abdeckt, wenn es erscheint - altough genug horizontalen Raum verlassen ist. Ich hätte erwartet, dass die Inhaltsgröße automatisch eingestellt worden wäre.
Wenn die vertikale Bildlaufrichtlinieneinstellung auf „on“, ist auch kein Gehalt abgedeckt.
Falls ich beiden Scroll-Richtlinien auf ‚auto‘ gesetzt Ich habe auch eine horizontale Bildlaufleiste nur für auf den Bereich scrollen, die durch die vertikale Bildlaufleiste abgedeckt ist.
Gibt es eine Abhilfe, wie ich den Inhalt der Leinwand Neu-Layout kann, wenn die vertikale Bildlaufleiste angezeigt wird, so dass es keinen Inhalt abdecken?
Lösung
Es ist ein Fehler. Siehe Flex vertical Bug für dieses Problem zu umgehen.
Andere Tipps
Nur eine Randnotiz zu diesem Thema: es ist eigentlich kein Bug, aber bekannt ist (und beabsichtigt?) Verhalten:
"Flex hält Scrollbalken in seiner Dimensionierung Berechnungen nur, wenn Sie explizit die Scroll-Politik
ScrollPolicy.ON
. Also, wenn Sie verwenden ein Autoscroll Politik (Standard), die Bildlaufleiste überlappt die Tasten. Zu verhindern, dass dieses Verhalten können Sie festlegen, dieheight
Eigenschaft für die HBox-Container oder lassen Sie die HBox-Container, um die Größe durch einen Prozentsatz basierende Breite einstellen. Denken Sie daran, dass die Höhe der Veränderung der HBox-Container verursacht andere Komponenten in der Anwendung zu bewegen und die Größe nach ihrem eigenen Dimensionierungsregeln. "
- Von Sizing Komponenten in der Flex 3 Hilfe, unter "Verwenden von Bildlaufleisten"
Ich hatte diese Abhilfe zu finden Flex ScrollPolicy.AUTO Nicht gut genug , die dieses Problem gelöst, weil Flex vertical Bug Abhilfe nicht funktioniert für mich.
auf vbox oder einer anderen Komponente basiert auf Container, löste ich das Problem so.
Falsch:
<mx:VBox width="100%" height="100%"
verticalScrollPolicy="auto" horizontalScrollPolicy="off">
<mx:Repeater dataProvider="{hede}">
<custom:RenderItem ........../>
</mx:Repeater>
</mx:VBox>
gibt es keine Bildlaufleiste
Arbeitsversion:
<mx:VBox width="100%" height="100%"
**minHeight="1"** horizontalScrollPolicy="off">
<mx:Repeater dataProvider="{hede}">
<custom:RenderItem ........../>
</mx:Repeater>
</mx:VBox>
Ich bin auch. Ich habe in der Regel einige Probleme mit dem verticalScrollBar in Flex, so dass ich lieber den Browser des Scrollbar zum Scrollen die komplette Anwendung verwenden. Sie können eine Abhilfe Sie hier: Wie die Flex-Bühne um die Größe und den Browser Scrollbar verwenden.
Der Code, den ich verwenden:
In Flex:
ExternalInterface.call("setInitialFlashHeight", this.height);
In meiner HTML (JavaScript):
function setInitialFlashHeight(newHeight) {
document.getElementById('my_flash').style.height = newHeight + 'px';
}
Und wenn Sie hinzufügen möchten (oder entfernen) eine gewisse Höhe:
function addFlashHeight(height) {
var divHeight;
var obj = document.getElementById('my_flash');
if (obj.offsetHeight) {
divHeight = obj.offsetHeight;
} else if (obj.style.pixelHeight){
divHeight = obj.style.pixelHeight;
}
var newHeight = divHeight + height;
document.getElementById('my_flash').style.height = newHeight + 'px';
}
So entfernen Sie "-". Statt "+"