Re: How to constrain a UISlider in a UIToolbar?
Re: How to constrain a UISlider in a UIToolbar?
- Subject: Re: How to constrain a UISlider in a UIToolbar?
- From: David Duncan <email@hidden>
- Date: Thu, 31 Jul 2014 10:50:01 -0700
> On Jul 31, 2014, at 10:24 AM, Kyle Sluder <email@hidden> wrote:
>
> On Jul 31, 2014, at 10:05 AM, David Duncan <email@hidden> wrote:
>>
>>
>>> On Jul 30, 2014, at 9:00 PM, Gerriet M. Denkmann <email@hidden> wrote:
>>>
>>>
>>> On 31 Jul 2014, at 00:18, David Duncan <email@hidden> wrote:
>>>
>>>>> That's the purpose of setting the auto-resizing mask to FlexibleWidth. At least for title views, that causes UINavigationBar to send -sizeThatFits: to the view.
>>>>
>>>> For UINavigationBar you shouldn’t need to even set flexible width, just implement -sizeThatFits:. Unfortunately UIToolbar does not call -sizeThatFits: for the views of bar button items.
>>>>
>>>> Gerriet, you can try setting the frame of the slider then calling -setNeedsLayout/-layoutIfNeeded on the toolbar to update the layout. If you do this within the standard layout callbacks it should go along with any animation that is already going.
>>>
>>> Following your suggestion I changed my code to:
>>>
>>> override func viewWillLayoutSubviews() // manage slider in bottomToolBar
>>> {
>>> // current width of toolbar is all wrong. Need to do:
>>> bottomToolBar.setNeedsLayout()
>>> bottomToolBar.layoutIfNeeded()
>>
>> Assuming that you're in a typical case (the toolbar is the same width as your view) you can just use self.view.bounds.width instead of bottomToolBar.frame.size.width here. This is likely to be more robust
>
> Really? This goes against my instinct… the desired result is that the slider take up a certain percentage of its superview. Therefore the computation should encode this relationship.
I say this mostly because of my answer to your next question...
>
>> (given that calling setNeedsLayout/layoutIfNeeded on the toolbar as you do above really should not change the toolbar’s size…).
>
> This actually gets at a question I’ve had for a while—does -layoutIfNeeded resize the receiver, or only its subviews? I’m not sure the docs are explicit about this.
… which is that [view layoutIfNeeded] should not resize ‘view’ in the general case. What is likely happening here is that the layout is climbing up to the superview and then descending back down, but thats not something to be counted on (if the superview isn’t marked as dirty, this may not happen).
So I am also not terribly satisfied with using view.bounds as a proxy for toolbar.frame, but should the code paths that make this work change sufficiently in the future that [view layoutIfNeeded] does not resize the toolbar, this code would be broken (in so far as the slider would not be the right size) but if the overall layout guaranteed the toolbar would be the full width of the view then the proxying is at least justifiable.
I would hope that we can make this better in the future overall, as things like this should really be very automatic.
>
> --Kyle Sluder
--
David Duncan
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden