Преобразование из Obj C в C # - PullRequest
8 голосов
/ 29 января 2012

Я пытаюсь преобразовать этот кусок кода в C #, код взят из документации Apple

NSDictionary* info = [aNotification userInfo];

CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);

scrollView.contentInset = contentInsets;

scrollView.scrollIndicatorInsets = contentInsets;

CGRect aRect = self.view.frame;

aRect.size.height -= kbSize.height;

if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {

    CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);

    [scrollView setContentOffset:scrollPoint animated:YES];

Пока это моя попытка, я застреваю в CGRectValue.

                    NSDictionary info = n.UserInfo;

        SizeF kbSize = ((RectangleF)info[UIKeyboard.FrameBeginUserInfoKey]).Size;

        UIEdgeInsets contentInsets = new UIEdgeInsets(0.0f, 0.0f, kbSize.Height, 0.0f);

        this.uiScrollView.ContentInset = contentInsets;
        this.uiScrollView.ScrollIndicatorInsets = contentInsets;

        RectangleF aRect = this.View.Frame;

        aRect.Size.Height -= kbSize.Height;

        if(!aRect.Contains(_currentField.Frame))
        {
            PointF scrollPoint = new PointF(0.0f, _currentField.Frame.Y - kbSize.Height);
            this.uiScrollView.SetContentOffset(scrollPoint, true);
        }

Я, вероятно, не использую правильный тип, может кто-нибудь, пожалуйста, помогите мне, или какой-нибудь альтернативный код, делающий подобное. Спасибо

Ответы [ 2 ]

13 голосов
/ 29 января 2012

Разобрался:

((NSValue)info[UIKeyboard.FrameBeginUserInfoKey]).RectangleFValue.Size

Это должно работать. Хотя я не мог заставить его работать так, как хотел, эта строка кода на самом деле компилировалась и транслировалась в код Obj C.

5 голосов
/ 29 января 2012

Что-то не так с вашим кодом C #.

aRect.Size.Height -= kbSize.Height;

Size имеет тип System.Drawing.SizeF, который является структурой (то есть типом значения).Изменение его значения не будет распространено обратно на экземпляр aRect (это поведение .NET).

Что вы должны сделать, это:

aRect.Height -= kbSize.Height;

, которое будет уменьшенона самом деле размер aRect (не структура Size, которая не будет присвоена обратно RectangleF).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...