WebHU - Programozási kérdések és válaszok

Furcsa UIView-méretek a tájolás megváltoztatása után

Rönköt készítek a főnézet méreteiből, és furcsa méreteket tapasztaltam a orientation=4-nél a rönkön. Nem tudtam rájönni, hogy mi a probléma. Íme a kódom:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];

}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft;
}

- (void)orientationDidChange:(NSNotification *)note
{
    int orientation = [[UIDevice currentDevice] orientation];
    NSLog(@"orientation=%i -------------------------------",orientation);
    CGRect f = self.view.frame;                     NSLog(@"self.view.frame =(%f, %f, %f, %f)",f.origin.x, f.origin.y, f.size.width, f.size.height);
    f = self.view.bounds;                           NSLog(@"self.view.bounds=(%f, %f, %f, %f)",f.origin.x, f.origin.y, f.size.width, f.size.height);
    f = [[UIScreen mainScreen] applicationFrame];   NSLog(@"main.app.frame  =(%f, %f, %f, %f)",f.origin.x, f.origin.y, f.size.width, f.size.height);
    f = [[UIScreen mainScreen] bounds];             NSLog(@"main.bounds     =(%f, %f, %f, %f)",f.origin.x, f.origin.y, f.size.width, f.size.height);

}

Az eredmények a következők:

orientation=1 -------------------------------
self.view.frame =(0.000000, 20.000000, 320.000000, 460.000000)
self.view.bounds=(0.000000, 0.000000, 320.000000, 460.000000)
main.app.frame  =(0.000000, 20.000000, 320.000000, 460.000000)
main.bounds     =(0.000000, 0.000000, 320.000000, 480.000000)

orientation=0 -------------------------------
self.view.frame =(0.000000, 20.000000, 320.000000, 460.000000)
self.view.bounds=(0.000000, 0.000000, 320.000000, 460.000000)
main.app.frame  =(0.000000, 20.000000, 320.000000, 460.000000)
main.bounds     =(0.000000, 0.000000, 320.000000, 480.000000)

orientation=4 -------------------------------
self.view.frame =(0.000000, 20.000000, 320.000000, 460.000000) <== First time size
self.view.bounds=(0.000000, 0.000000, 320.000000, 460.000000) <== First time size
main.app.frame  =(0.000000, 20.000000, 320.000000, 460.000000) <== First time size
main.bounds     =(0.000000, 0.000000, 320.000000, 480.000000) <== First time size

orientation=2 -------------------------------
self.view.frame =(20.000000, 0.000000, 300.000000, 480.000000)
self.view.bounds=(0.000000, 0.000000, 480.000000, 300.000000)
main.app.frame  =(20.000000, 0.000000, 300.000000, 480.000000)
main.bounds     =(0.000000, 0.000000, 320.000000, 480.000000)

orientation=4 -------------------------------
self.view.frame =(20.000000, 0.000000, 300.000000, 480.000000) <== Why is it different?
self.view.bounds=(0.000000, 0.000000, 480.000000, 300.000000) <== Why is it different?
main.app.frame  =(20.000000, 0.000000, 300.000000, 480.000000) <== Why is it different?
main.bounds     =(0.000000, 0.000000, 320.000000, 480.000000) <== Why is it different?

A probléma megoldásához a következő lépéseket tettem:

- cmd+right arrow
- cmd+right arrow
- cmd+left arrow

Válaszok:


1

Ön nem támogatja az UUInterfaceOrientationMaskPortraitUpsideDown tájolást (azaz a 4-es tájolást).

Ezért a nézetnek nem szabad elfordulnia, ha az eszköz UIInterfaceOrientationMaskPortraitUpsideDown.

Figyelje meg, hogy amikor a 4. tájolásra forgat, az értékek pontosan megegyeznek az előző tájolás méreteivel.

Ennek javításához:

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskPortraitUpsideDown;
}

És győződjön meg arról, hogy fejjel lefelé is kiválasztotta a támogató eszköz tájolását.

03.11.2013
  • Köszönöm, de nem szeretném támogatni az UpsideDown orientációt. A további UIInterfaceOrientationMaskPortraitUpsideDown nem oldja meg a problémát 03.11.2013
  • A problémád az volt, hogy nem tudtad kideríteni, mi okozza a furcsa méreteket. Ez azért van, mert nem támogatta a 4-es tájolást, így még ha megpróbáltad is elforgatni, az értékek továbbra is az előző tájolásban maradnak. Lehet, hogy ez kevésbé nyilvánvaló a szimulátoron. Az eszközön azonban megpróbálhatja fizikailag fejjel lefelé fordítani az eszközt, de a felhasználói felület elforgatása nem történik meg. A 4. tájolásra való áttéréskor lényegében nem frissül a felhasználói felület, mert az nem támogatott. 03.11.2013
  • Kedves TreeTree, nem tudom, mit értettek félre, de hozzáadtam az UIInterfaceOrientationMaskPortraitUpsideDown-t a supportedInterfaceOrientations metódushoz, megnéztem az összes lehetőséget a Támogatott felület-tájolásoknál a projekt összefoglalójában, és ugyanúgy működött. 04.11.2013
  • Úgy tűnik, mindig örökli az előző orientáció értékeit. 04.11.2013
  • Hozzáadhat valamit az UIView-hoz, pl. egy gombot. És nézze meg, hogy a gomb az UpsideDown-nál is forog-e. 04.11.2013
  • Helló, Még mindig nem, megpróbáltam elkészíteni a gombokat, de minden rendben van velük. Készítettünk egy alkalmazást ezzel a kóddal egy másik Mac/Xcode-on, de az is működött. frissíteni foglak. Köszönjük TreeTree! 08.11.2013
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..