Ich habe eine Methode ein Collection zu bewegen, wenn zwei Textfelder im Innern durch den Rahmen der iPad-Tastatur verdeckt sind:Wie kann ich eine Ansicht bewegen, um eine UITextField, um zu sehen, wenn die Tastatur vorhanden ist, wenn UICollectionViewFlowLayout mit
private void OnKeyboardNotification(NSNotification notification)
{
var activeTextField = FindFirstResponder(CollectionView);
NSDictionary userInfo = notification.UserInfo;
CGSize keyboardSize = ((NSValue)userInfo[UIKeyboard.FrameBeginUserInfoKey]).RectangleFValue.Size;
var contentInset = new UIEdgeInsets(0, 0, keyboardSize.Height, 0);
CollectionView.ContentInset = contentInset;
CollectionView.ScrollIndicatorInsets = contentInset;
CGRect oldRect = CollectionView.Frame;
CGRect aRect = new CGRect(oldRect.X, oldRect.Y, oldRect.Width,
oldRect.Height -= keyboardSize.Height);
if (!aRect.Contains(activeTextField.Frame.Location))
{
CGPoint scrollPoint = new CGPoint(0, activeTextField.Frame.Location.Y - (keyboardSize.Height - 15));
CollectionView.SetContentOffset(scrollPoint, true);
}
}
Ich glaube nicht, dass der Code wie vorgesehen funktioniert. Es ist kompliziert durch die Tatsache, dass ich ein benutzerdefiniertes Layout in einer Unterklasse von UICollectionViewFlowLayout definiert habe. Das Layout ermöglicht es mir, Zellen vertikal scrollen zu lassen, die scharf stellen.
Jedes Mal, wenn ich OnKeyboardNotification
anrufen, wird override UICollectionViewLayoutAttributes[]
danach im benutzerdefinierten Layout aufgerufen. Ich dachte, dies könnte die Wirkung der Methode aufheben, aber wenn das der Fall ist, wie kann ich dann ändern, wenn UICollectionViewLayoutAttributes[]
aufgerufen wird?
public override UICollectionViewLayoutAttributes[] LayoutAttributesForElementsInRect(CGRect rect)
{
var array = base.LayoutAttributesForElementsInRect(rect);
var visibleRect = new CGRect(CollectionView.ContentOffset, CollectionView.Bounds.Size);
foreach (var attributes in array)
{
if (attributes.Frame.IntersectsWith(rect))
{
float distance = (float)(visibleRect.GetMidX() - attributes.Center.X);
float normalizedDistance = distance/ACTIVE_DISTANCE;
if (Math.Abs(distance) < ACTIVE_DISTANCE)
{
float zoom = 1 + ZOOM_FACTOR * (1 - Math.Abs(normalizedDistance));
attributes.Transform3D = CATransform3D.MakeScale(zoom, zoom, 1.0f);
attributes.ZIndex = 1;
}
}
}
return array;
}
Edit:
Hier ist ein Beispiel für das Problem.
Ich habe zwei Felder
und hier, wenn ‚Bearbeitungsmodus‘ eingegeben wird, wird die Tastatur blendet das Altersfeld.
Ich kann Ihnen kein Problem klar, könnten Sie einige Screenshots veröffentlichen, um das Problem zu zeigen? –
Natürlich, bitte sehen Sie meine Bearbeitung – Chucky