Заголовок UIButton не отображается при применении UIVibrancyEffect

У меня возникли проблемы с применением UIVibrancyEffect к моим UIButtons в виджете iOS Today. Я хочу, чтобы им понравилась кнопка «Изменить» по умолчанию в разделе «Сегодня» центра уведомлений:

Виджет

Как вы можете видеть на скриншоте, кнопка по умолчанию яркая и выглядит намного лучше.

Я попытался заменить виджет View на UIVisualEffectView следующим образом:

UIVisualEffectView effectView = new UIVisualEffectView(UIVibrancyEffect.CreateForNotificationCenter ());
effectView.Frame = this.View.Bounds;
effectView.AutoresizingMask = this.View.AutoresizingMask;
UIView oldView = this.View;
this.View = effectView;
effectView.ContentView.AddSubview(oldView);
this.View.TintColor = UIColor.Clear;

И вроде работает, но названия моих кнопок тоже становятся яркими (я хочу, чтобы они оставались черными):

введите здесь описание изображения

Есть ли способ предотвратить появление ярких заголовков кнопок при применении UIVibrancyEffect?

Я также должен добавить, что я использую Xamarin.iOS.


person Andrius    schedule 17.12.2015    source источник
comment
я тоже мучаюсь с этой проблемой   -  person Pandara    schedule 28.12.2015


Ответы (1)


Кажется, у меня есть решение моей проблемы. В итоге я создал UIVisualEffectView с пустым UIView внутри и добавил его за UIButton.

Этот фрагмент кода показывает, как оформить одну кнопку:

// Create effect view
var effectView = new UIVisualEffectView(UIVibrancyEffect.CreateForNotificationCenter ());
// This color looks best for me. You can play around with it to make it look better
effectView.BackgroundColor = UIColor.FromRGBA(55, 55, 55, 100);
// Position effectView
effectView.Frame = myButton.Frame;
// Add effectView and send it to back, behind actual button
this.View.AddSubview(effectView);
this.View.SendSubviewToBack (effectView);

// Create UIView and add it to effectView's ContentView
var view = new UIView ();
view.BackgroundColor = UIColor.White;
effectView.ContentView.AddSubview(view);
view.Frame = new CGRect(0, 0, effectView.Frame.Width, effectView.Frame.Height);

// Make sure your effect view has rounded corners
effectView.Layer.MasksToBounds = true;
effectView.Layer.CornerRadius = 4.0f;

И вот как это выглядит:

введите здесь описание изображения

person Andrius    schedule 29.12.2015
comment
Большой! Большое спасибо за этот фрагмент. - person Viktor Kucera; 02.04.2016