Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Obj C到C的转换#_C#_.net_Objective C_Xamarin.ios_Uikeyboard - Fatal编程技术网

C# 从Obj C到C的转换#

C# 从Obj C到C的转换#,c#,.net,objective-c,xamarin.ios,uikeyboard,C#,.net,Objective C,Xamarin.ios,Uikeyboard,我正在尝试将这段代码转换为C#,代码来自苹果公司的 到目前为止,这是我的尝试,我被CGRectValue卡住了 NSDictionary info = n.UserInfo; SizeF kbSize = ((RectangleF)info[UIKeyboard.FrameBeginUserInfoKey]).Size; UIEdgeInsets contentInsets = new UIEdgeInsets(0.0f

我正在尝试将这段代码转换为C#,代码来自苹果公司的

到目前为止,这是我的尝试,我被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);
        }
我可能没有使用正确的类型,请有人帮助我,或一些替代代码做类似的事情。 谢谢

我想明白了:

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

这应该行得通。虽然我不能让它像我想要的那样工作,但这行代码实际上会编译并转换成Obj C代码

您的C#代码还有其他问题

Size
类型为
System.Drawing.SizeF
,它是一种结构(即值类型)。更改它的值不会传播回to
aRect
实例(这是一种.NET行为)

你应该做的是:

aRect.Height -= kbSize.Height;

这将实际减少
aRect
大小(而不是
size
struct,它不会被分配回
RectangleF
)。

我不确定您所说的“我被CGRectValue卡住了”是什么意思。调试器是否显示前面提到的所有变量都具有您期望的值?在aRect=self.view.frame之后,调试器对aRect显示了什么?我无法将该行转换为C代码。它不编译。请看我试过的C代码。如何获得
\u currentField
?我也在转换教程…谢谢你的精彩报道。这实际上是我翻译中的一个错误。现在,它工作得更好了,但不确定为什么当我开始打字时,UITextField仍然会有点跳起来,尽管它已经在键盘顶部可见。有什么建议吗?看它跳得有多好;-)但是,如果你能创建一个小型的、自包含的测试用例来显示行为,然后将它附加到一个bug报告中,我们会查看它。好的,就可以了。同时,你能告诉我是否还有其他解决这个问题的方法,比如当键盘放在文本字段上时,让文本字段可见。到目前为止,我还没有为monotouch找到一个好的工作样本。谢谢你的帮助。我不知道有什么问题。调用
textfield。成为第一反应者()应该处理这个问题,或者我没有正确理解您的问题?在任何情况下,询问另一个问题可能会更快,并提供完整的描述(如果有,还可以使用ObjC代码),因为这将允许许多其他人查看
aRect.Size.Height -= kbSize.Height;
aRect.Height -= kbSize.Height;