Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ios: layout changes in deviceOrientationChanged are not always correctly updated on display #130

Open
cjohn001 opened this issue Apr 6, 2024 · 0 comments

Comments

@cjohn001
Copy link

cjohn001 commented Apr 6, 2024

Environment

OS: macOS 14.4.1
CPU: (10) arm64 Apple M1 Pro
Shell: /bin/zsh
node: 20.11.1
npm: 10.2.4
nativescript: 8.6.5

# android
java: 11.0.22
ndk: Not Found
apis: Not Found
build_tools: Not Found
system_images: Not Found

# ios
xcode: 15.3/15E204a
cocoapods: 1.15.2
python: 3.12.2
python3: 3.12.2
ruby: 2.7.8
platforms: 
  - DriverKit 23.4
  - iOS 17.4
  - macOS 14.4
  - tvOS 17.4
  - visionOS 1.1
  - watchOS 10.4

Dependencies

"dependencies": {
  "@angular/animations": "17.3.3",
  "@angular/common": "17.3.3",
  "@angular/compiler": "17.3.3",
  "@angular/core": "17.3.3",
  "@angular/forms": "17.3.3",
  "@angular/platform-browser": "17.3.3",
  "@angular/platform-browser-dynamic": "17.3.3",
  "@angular/router": "17.3.3",
  "@apollo/client": "3.9.10",
  "@mnd/external-web-view": "file:../app-plugins/dist/packages/external-web-view/mnd-external-web-view-1.0.1.tgz",
  "@nativescript/angular": "17.0.0",
  "@nativescript/core": "8.6.2",
  "@nativescript/iqkeyboardmanager": "2.1.1",
  "@nativescript/localize": "5.2.0",
  "@nativescript/mlkit-barcode-scanning": "2.1.0",
  "@nativescript/mlkit-core": "2.1.0",
  "@nativescript/secure-storage": "3.0.3",
  "@nativescript/theme": "3.0.2",
  "@nativescript/ui-charts": "0.2.4",
  "apollo-angular": "6.0.0",
  "apollo3-cache-persist": "0.15.0",
  "d3-ease": "3.0.1",
  "graphql": "16.8.1",
  "graphql-tag": "2.12.6",
  "intl": "1.2.5",
  "moment": "2.30.1",
  "nativescript-health-data": "file:../app-plugins-customized/nativescript-health-data/publish/package/nativescript-health-data-2.0.0.tgz",
  "nativescript-oauth2-ext": "file:../app-plugins-customized/nativescript-oauth2-ext/publish/package/nativescript-oauth2-ext-3.0.3.tgz",
  "nativescript-sqlite": "2.8.6",
  "nativescript-sqlite-commercial": "file:../app-plugins-customized/commercial-sqlite/nativescript-sqlite-commercial-1.8.0.tgz",
  "nativescript-sqlite-encrypted": "file:../app-plugins-customized/commercial-sqlite/nativescript-sqlite-encrypted-1.6.0.tgz",
  "nativescript-ui-calendar": "15.2.3",
  "nativescript-ui-gauge": "15.2.3",
  "qs": "npm:[email protected]",
  "rxjs": "7.8.1",
  "util": "0.12.5",
  "uuidjs": "5.0.1",
  "zone.js": "0.14.4"
},
"devDependencies": {
  "@angular-devkit/build-angular": "17.3.3",
  "@angular/compiler-cli": "17.3.3",
  "@graphql-codegen/cli": "5.0.2",
  "@graphql-codegen/fragment-matcher": "5.0.2",
  "@graphql-codegen/introspection": "4.0.3",
  "@graphql-codegen/typescript": "4.0.6",
  "@graphql-codegen/typescript-apollo-angular": "4.0.0",
  "@graphql-codegen/typescript-operations": "4.2.0",
  "@nativescript/android": "8.6.2",
  "@nativescript/ios": "8.6.4",
  "@nativescript/types": "8.6.1",
  "@nativescript/webpack": "5.0.18",
  "@ngtools/webpack": "17.3.3",
  "@types/d3-ease": "3.0.2",
  "@types/intl": "1.2.2",
  "@types/lodash": "4.17.0",
  "@types/node": "20.12.5",
  "keycloak-request-token": "0.1.0",
  "rimraf": "5.0.5",
  "sass": "1.74.1",
  "ts-node": "10.9.2",
  "typescript": "5.2.2"
}

Describe the bug
When I do a layout change in the orientationChangedEvent method these changes are not correctly applied to the user interface, if I do not explictely call ChangeDetectorRef.detectChanges().

To Reproduce

        private readonly cdr = inject(ChangeDetectorRef);
        public _rows = signal<string>(
		this._isSmallTablet
			? '*,60,60,60,60,60,60,60,60,60,60,60,60,60,*'
			: '25,60,60,60,60,60,60,60,60,60,60,60,60,60,*'
	);
	
        ngOnInit(){
	Application.on(Application.orientationChangedEvent, this.deviceOrientationChanged, this);
	}
	//////////////////////////////////////////////////////////////////////////////////////////////////
	private updateLayoutMode(mode: 'portrait' | 'landscape' | 'unknown') {
		let rows: string;
		if (mode !== 'landscape') {
			this._showActionButtonsWithText = true;
			rows = '25,60,60,60,60,60,60,60,60,60,60,60,60,60,*';
			if (this._isSmallTablet) {
				rows = '*,60,60,60,60,60,60,60,60,60,60,60,60,60,*';
			}
		} else {
			this._showActionButtonsWithText = false;
			rows = '*,60,60,60,60,60,60,60,60,*,60';
		}
		this._rows.set(rows);
	}
	//////////////////////////////////////////////////////////////////////////////////////////////////
	public deviceOrientationChanged(evt: OrientationChangedEventData) {
		if (Math.min(Screen.mainScreen.widthDIPs, Screen.mainScreen.heightDIPs) < 1000) {
			this.updateLayoutMode(evt.newValue);
			this.cdr.detectChanges();
		}
	}

Expected behavior
I would expect that I do not need this.cdr.detectChanges(); in the deviceOrientationChanged method in order for layout changes to be picked up by renderer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant