Welcome!
This is the community forum for my apps Pythonista and Editorial.
For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.
Possible to change menubar/header color and font for ui.view?
-
Are you presentng full screen, sheet, or panel?
-
Bjucha, I am presenting a sheet.
The code is:
if __name__ == "__main__": v = FSButtonView() v.present('sheet', title_bar_color='#334444', hide_close_button=True, orientation=['portrait'])
The FSButtonView class derives from the ui.View class.
In the code, I add an ImageView instance as a subview of the main view to show an image that covers all the screen except the title bar. I want the title bar so the cell signal strength, the time, etc. are visible at the top of my iPhone screen. I also want the background of the title bar to match the background of the image. The image background is approximately the color '#334444'.
By tapping the screen (using Morse code) I can control various functions, including removing the subview (image) from the view, and later adding it back. When it's removed, the screen becomes black (minimum battery power), and I want the title bar to become black too. When I add the image back, I want the title bar to return to the image background color, not to the view background color).
The problem now is that the title bar is always the image background color. It do not know how to change the title bar to be black, and then how to change it back to the image color if the image (sub-view) is added back to the view.
If I hide the title bar by using a key argument (I think it was "hide_title_bar") in the "present" methods, then the image covers the entire screen, and then the cell signal strength, time, etc.., are not visible. I want those to remain visible.
I'm not sure what would happen if I hid the title bar when the image was removed, and showed the title bar when the image was put back. I also don't know how to hide/show the title bar dynamically, or if that's even possible.
-
So, this is not at all robust, and could change in any pythonista version.... but here is a way to get access to the title bar, to change its color, hide it, etc.
v=ui.View() v.present('sheet') V=ObjCInstance(v) titlebarbkg= V.superview().superview().superview().subviews()[1].subviews()[0] #a more robust way might be to keep traversing up until one of subviews is a UINavigationBar, then follow that down to the UINavigationBarBackground titlebarbkg.backgroundColor=UIColor.redColor() #titlebarbkg.backgroundColor=UIColor.UIColor.colorWithHexString_('ffee22') #titlebarbkg.hidden=True
-
JonB, thank you very much! That worked. I had tried to write some code that iterated over Obective C UI items, trying to find the item that mattered and changing it's color, but I never got it to work.
Eventually, I'll try to figure out the hierarchy using your code as a guide, and match to the right names so that the code is somewhat more robust to version changes. For now, I added the following method to my ui.View-derived class, that allows me to change the title bar color dynamically.
def change_title_bar_color(self, hex_color): """ Change the title bar color to the passed color. """ vv = ObjCInstance(self) bar_bckgnd = vv.superview().superview().superview().subviews()[1].subviews()[0] bar_bckgnd.backgroundColor = UIColor.colorWithHexString_(hex_color)
-
This post is deleted!