Теперь, прежде чем кто-либо проигнорирует это как дубликат, пожалуйста, прочитайте до конца. То, что я хочу, чтобы достичь этоДобавление нижней границы к записи в Xamarin Forms iOS с изображением в конце
Я делал некоторые погуглите и глядя на Objective C и быстрые ответы на StackOverflow, а также. И этот ответ StackOverFlowPost, казалось, указывал мне в правильном направлении. Автор даже сказал мне использовать ClipsToBounds, чтобы закрепить подзаголовок и убедиться, что он находится в пределах границ родителей. Теперь вот моя проблема, если я хочу показать изображение с правой стороны записи (поле «Пол»), я не могу, потому что я обрезаю subview.
Для отсечения я устанавливаю свойство IsClippedToBounds = "True" в родительском стеке для всех текстовых полей.
Это код, я использую, чтобы добавить нижнюю границу
Control.BorderStyle = UITextBorderStyle.None;
var myBox = new UIView(new CGRect(0, 40, 1000, 1))
{
BackgroundColor = view.BorderColor.ToUIColor(),
};
Control.AddSubview(myBox);
Это код, я использую, чтобы добавить изображение в начале или в конце записи
private void SetImage(ExtendedEntry view)
{
if (!string.IsNullOrEmpty(view.ImageWithin))
{
UIImageView icon = new UIImageView
{
Image = UIImage.FromFile(view.ImageWithin),
Frame = new CGRect(0, -12, view.ImageWidth, view.ImageHeight),
ClipsToBounds = true
};
switch (view.ImagePos)
{
case ImagePosition.Left:
Control.LeftView.AddSubview(icon);
Control.LeftViewMode = UITextFieldViewMode.Always;
break;
case ImagePosition.Right:
Control.RightView.AddSubview(icon);
Control.RightViewMode = UITextFieldViewMode.Always;
break;
}
}
}
После анализа и отладки я выяснил, что, когда вызывается функция OnElementChanged пользовательского рендерера, элемент управления все еще не нарисован, поэтому он не имеет размера. Так что я подклассы UITextField как этот
public class ExtendedUITextField : UITextField
{
public UIColor BorderColor;
public bool HasBottomBorder;
public override void Draw(CGRect rect)
{
base.Draw(rect);
if (HasBottomBorder)
{
BorderStyle = UITextBorderStyle.None;
var myBox = new UIView(new CGRect(0, 40, Frame.Size.Width, 1))
{
BackgroundColor = BorderColor
};
AddSubview(myBox);
}
}
public void InitInhertedProperties(UITextField baseClassInstance)
{
TextColor = baseClassInstance.TextColor;
}
}
И прошли hasbottomborder и BorderColor параметры как этот
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
var view = e.NewElement as ExtendedEntry;
if (view != null && Control != null)
{
if (view.HasBottomBorder)
{
var native = new ExtendedUITextField
{
BorderColor = view.BorderColor.ToUIColor(),
HasBottomBorder = view.HasBottomBorder
};
native.InitInhertedProperties(Control);
SetNativeControl(native);
}
}
Но после того, как делать это, теперь нет событий огня :( Может кто-то пожалуйста, мне точку в правильном направлении Я уже построил это для Android, но мне кажется, что проблема с iOS вызывает проблемы.
Я должен начать есть те суши, которые вы едите :) –