C# 从Obj C到C的转换#
我正在尝试将这段代码转换为C#,代码来自苹果公司的 到目前为止,这是我的尝试,我被CGRectValue卡住了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
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
,它是一种结构(即值类型)。更改它的值不会传播回toaRect
实例(这是一种.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;