Я пытаюсь разместить кнопку для реализации показать / скрыть пароль в пользовательском UITextView
в Xamarin.iOS . Однако я столкнулся с двумя (2) проблемами с дизайном пользовательского интерфейса.
Я использовал этот код, используемый для настройки кнопки «Показать / скрыть пароль», и он отлично работает:
UITextView vUpdatedEntry = (UITextView)Control;
var buttonRect = UIButton.FromType(UIButtonType.Custom);
buttonRect.SetImage(UIImage.FromBundle("show_black_24"), UIControlState.Normal);
buttonRect.TouchUpInside += (object sender, EventArgs e1) => {
if (vUpdatedEntry.SecureTextEntry)
{
vUpdatedEntry.SecureTextEntry = false;
buttonRect.SetImage(UIImage.FromBundle("hide_black_24"), UIControlState.Normal);
}
else
{
vUpdatedEntry.SecureTextEntry = true;
buttonRect.SetImage(UIImage.FromBundle("show_black_24"), UIControlState.Normal);
}
};
выпуск 1 . Я не могу предотвратить прокрутку кнопки при прокрутке UITextView
. Всякий раз, когда происходит прокрутка, это происходит:
В основном кнопка прокручивается вместе с текстом, который не является идеальным. Любые идеи о том, как это исправить, будут очень благодарны.
Issue 2 . Я пытаюсь получить кнопку, которая позволяет пользователю выбирать, хотят ли они, чтобы пароль был видимым или не был на правой стороне UITextView
. Я использовал код ниже, чтобы сделать это.
buttonRect.Frame = new CoreGraphics.CGRect(10.0f, 0.0f, 15.0f, 15.0f);
buttonRect.ContentMode = UIViewContentMode.ScaleToFill;
buttonRect.BackgroundColor = UIColor.Orange;
UIView paddingViewRight = new UIView(new System.Drawing.RectangleF(0.0f, 0.0f, 30.0f, 18.0f));
paddingViewRight.BackgroundColor = UIColor.Purple;
paddingViewRight.AddSubview(buttonRect);
buttonRect.TranslatesAutoresizingMaskIntoConstraints = false;
buttonRect.CenterYAnchor.ConstraintEqualTo(paddingViewRight.CenterYAnchor).Active = true;
vUpdatedEntry.TextContainerInset = new UIEdgeInsets(8.0f, 0.0f, 8.0f, paddingViewRight.Frame.Width+5.0f);
vUpdatedEntry.AddSubview(paddingViewRight);
paddingViewRight.TranslatesAutoresizingMaskIntoConstraints = false;
paddingViewRight.TrailingAnchor.ConstraintEqualTo(vUpdatedEntry.LayoutMarginsGuide.TrailingAnchor, 9.0f).Active = true;
paddingViewRight.HeightAnchor.ConstraintEqualTo(vUpdatedEntry.HeightAnchor).Active = true;
paddingViewRight.WidthAnchor.ConstraintEqualTo(buttonRect.WidthAnchor,1.0f, 0.0f).Active = true;
Control.Layer.CornerRadius = 4;
Control.Layer.BorderColor = new CoreGraphics.CGColor(255, 255, 255);
Control.Layer.MasksToBounds = true;
vUpdatedEntry.TextAlignment = UITextAlignment.Left;
, и это дает мне это:
Это мой желаемый визуальный результат, как это выглядит на изображении ниже, когда цвета фона удалены:
Однако это решение выглядит довольно hacky с большим количеством констант, используемых в местах, где я ожидал бы, что использование свойства привязки AutoLayout
должно работать. Я пытался использовать свойство TrailingAnchor
с ConstraintEqualTo
для достижения этого ( this - это липкость к правой стороне UITextView
), но оно продолжало придерживаться левой сторонывместо. Более ценный подход к достижению этой цели будет высоко ценится