Wat is het verschil tussen navigationController.navigationBarHidden en navigationController.navigationBar.hidden?

Ik vond de harde manier dat

navigationController.navigationBarHidden = NO;

en

navigationController.navigationBar.hidden = NO;

are not the same thing. In fact, if I use the first syntax to hide the nav bar, then I cannot use the second syntax to show it: it simply won't do anything. Moreover, the first syntax to show/hide the nav bar always works for me, while the second syntax works some times, but not always. I haven't been able to determine exactly when it would work en when not.

As I was stuck with fixing somebody else's code (a reasonably large app: over 20 UIViewControllers), I had to do a global search for navigationBar.hidden en replace it with navigationBarHidden. After that, I had to do a global search for navigationBar setHidden: en replace with navigationBarHidden syntax. This eventually fixed the issue.

Yet, I want to understen why the two different options are provided en what the real difference between them is.

7

1 antwoord

navigationBarHidden past een animatie toe bij verbergen of tonen van de navBar-duur van deze navigatie kan worden ingesteld met behulp van UINavigationControllerHideShowBarDuration

Waar navigationBar.hidden de zichtbaarheidstatus van de UINavigationBar (die een subklasse van UIView is) rechtstreeks verandert

Omdat UINavigationBar een subklasse van UIView is, heeft deze de verborgen bool-eigenschap overgenomen, geen manier om deze te wijzigen in beveiligd of privé

From apple docs

De navigatiecontroller is verantwoordelijk voor het beheer van de   configuratie en weergave van de navigatiebalk en navigatie   werkbalk. U moet deze weergaven nooit rechtstreeks wijzigen. In plaats daarvan, jij   moet ze manipuleren door middel van de methoden en eigenschappen van de   UINavigationController-klasse. U kunt de navigatiebalk verbergen en weergeven   met behulp van de eigenschap navigationBarHidden of   setNavigationBarHidden: geanimeerd: methode.

4
toegevoegd
Ok, het begint logisch te worden. Dit betekent dat ik navigationBar.hidden niet rechtstreeks zou moeten gebruiken, maar gebruik in plaats hiervan navigationBarHidden - toch?
toegevoegd de auteur Aleks G, de bron
Ok, dit is nu helemaal logisch. Bedankt.
toegevoegd de auteur Aleks G, de bron
ja dit lijkt het geval te zijn, omdat je een expliciete eigenschap hebt die de navBar verbergt en weergeeft
toegevoegd de auteur Omar Abdelhafith, de bron
@AleksG lees bijgewerkte antwoord
toegevoegd de auteur Omar Abdelhafith, de bron
graag gedaan :)
toegevoegd de auteur Omar Abdelhafith, de bron
@OmarAbdelhafith Waarom zouden we de eigenschap UIView's @hidden niet direct gebruiken? Heeft de standaardwaarde van UINavigationController's @navigationBarHidden -eigenschap deze overschreven?
toegevoegd de auteur KarenAnne, de bron