当Windows Phone应用程序中显示软键盘时,有没有办法阻止屏幕向上移动?
我有一个位于屏幕上半部分的文本框,因此当显示软键盘时,它不会覆盖文本框.但是,当点击文本框时,屏幕仍会向上移动.
这可以预防吗?
Cocoa/Objective-C有两个运行时:遗留运行时和"现代"运行时(这就是Apple所说的).
根据Apple的文档," Mac OS X v10.5及更高版本的iPhone应用程序和64位程序使用现代版本的运行时 ".
到现在为止还挺好.
现在,"现代"运行时支持一个名为"合成实例变量"的功能,这意味着您不必为每个声明的属性定义实例变量.实例变量将自动添加.引用来自iPhone参考库:" 对于现代运行时,实例变量根据需要合成.如果已经存在同名的实例变量,则使用它. "
如果您在iPhone应用程序中使用此功能,它会在iPhone(物理)设备上构建并运行良好,但是当您将目标更改为"iPhone模拟器"时,会出现构建错误:
合成属性"x"必须与兼容的ivar命名相同,或者必须明确命名为ivar
这里发生了什么?iPhone模拟器不是真正的iPhone模拟器吗?这是否意味着模拟器使用与物理iPhone不同的运行时?
如何在iPhone模拟器上使用此功能?
编辑:
定位iPhone模拟器时无法编译的代码是:
@interface MyClass : NSObject {
}
@property NSString *prop1;
@end
Run Code Online (Sandbox Code Playgroud)
根据文档,这应该在"现代"运行时工作正常,事实上它确实在iPhone设备上,但它在将目标更改为iPhone模拟器时无法编译.
在iOS中,我需要知道实际时间(UTC),而不是设备的时间.换句话说,用户不应该篡改时间或日期.
任何需要网络连接的东西都不好(因此不能选择访问时间服务器).
AFAIK,有两种理论方法可以达到这个目的:
问题是iOS中的任何API都不会公开此信息.
还有另外一种方法吗?
由于Xamarin.iOS在运行时不支持代码生成,为什么Compile()和DynamicInvoke()按预期工作?
例如,以下代码工作正常:
var lambda = Expression.Lambda(
Expression.Add(
Expression.Constant(1),
Expression.Constant(2)
)
);
var f = lambda.Compile();
var result = f.DynamicInvoke();
// result==3 at this point
Run Code Online (Sandbox Code Playgroud)
Xamarin是否在运行时评估表达式树而不是发出IL代码?
我有一个自定义Panel,我声明了一个自定义属性来保存内容(我不想使用Children作为内容):
[ContentProperty(Name = "PanelContent")]
public class CustomPanel : Panel
{
public static readonly DependencyProperty PanelContentProperty =
DependencyProperty.Register("PanelContent",
typeof(Collection<UIElement>), typeof(CustomPanel),
new PropertyMetadata(new Collection<UIElement>(), null));
public Collection<UIElement> PanelContent
{
get
{
return (Collection<UIElement>)GetValue(PanelContentProperty);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样使用时效果很好:
<CustomPanel>
<TextBlock>A</TextBlock>
<TextBlock>B</TextBlock>
</CustomPanel>
Run Code Online (Sandbox Code Playgroud)
但是当我想在ItemsControl中使用面板作为ItemsPanelTemplate时,将忽略ContentProperty属性并将所有内容添加到Children集合,而不是PanelContent集合:
<ItemsControl ItemTemplate="{StaticResource ReviewTemplate}" ItemsSource="{Binding Reviews}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<CustomPanel></CustomPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
这不是它应该如何工作.根据文件:
ItemsPanelTemplate对象元素应该只包含一个FrameworkElement派生类,该类用作项的根元素.在大多数情况下,这是一个Panel派生类.扩展模板用作已实现项目的父项,并且通常存在多个项目.因此,ItemsPanelTemplate的预期根元素的XAML内容属性应该支持集合,如Panel.Children所做的那样.
我试图在.NET(C#)中的字符串中删除XML实体,但我似乎没有让它正常工作.
例如,如果我有字符串AT&T,则应将其翻译为AT&T.
一种方法是使用HttpUtility.HtmlDecode(),但这是用于HTML.
所以我有两个问题:
使用HttpUtility.HtmlDecode()解码XML实体是否安全?
我如何使用XmlReader(或类似的东西)来做到这一点?我尝试了以下,但总是返回一个空字符串:
static string ReplaceEscapes(string text)
{
StringReader reader = new StringReader(text);
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
using (XmlReader xmlReader = XmlReader.Create(reader, settings))
{
return xmlReader.ReadString();
}
}
Run Code Online (Sandbox Code Playgroud)我知道这个关键字的功能,但我想知道它是如何在较低级别上工作的.
哪一个更快?他们总能产生相同的结果吗?如果他们这样做,为什么有两种不同的方式?
// Is there an overhead? An internal try catch?
Class123 obj = someobject as Class123;
if (Class123 != null)
{
//OK
}
Run Code Online (Sandbox Code Playgroud)
要么
Class123 obj = null;
if (someobject is Class123)
{
obj = (Class123)someobject;
}
Run Code Online (Sandbox Code Playgroud) 我在使用autolayout尝试使用子视图填充视图时发现了一些非常奇怪的行为.这个想法非常简单:向视图添加子视图并使其使用父视图的所有宽度.
NSDictionary *views = @{
@"subview":subView,
@"parent":self
};
Run Code Online (Sandbox Code Playgroud)
这不起作用:
[self addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[subview]|"
options:0
metrics:nil
views:views]];
Run Code Online (Sandbox Code Playgroud)
子视图不使用父视图的完整宽度.
但这有效:
[self addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[subview(==parent)]|"
options:0
metrics:nil
views:views]];
Run Code Online (Sandbox Code Playgroud)
我希望两者都能按预期工作.那么为什么第一个例子不起作用呢?这是Apple在以下技术说明中推荐的内容:
https://developer.apple.com/library/ios/technotes/tn2154/_index.html
编辑 :(删除无关信息)
在经历了一天中的大部分时间之后,我偶然发现了使用.NET Native(用于Windows UWP应用程序)编译的.NET代码的一个非常奇怪的问题.
以下代码适用于任何.NET运行时环境,包括Mono,Xamarin等:
public class ABC {}
// ...
var constr = typeof(ABC).GetTypeInfo().DeclaredConstructors.First();
var abc = (ABC) constr?.Invoke(new object[0]);
// abc now contains an instance of ABC
Run Code Online (Sandbox Code Playgroud)
在具有.NET本机编译的Windows UWP上,代码会引发类型异常 NotImplementedException
但是,当删除空传播运算符时,它在.NET Native上完美运行:
public class ABC {}
// ...
var constr = typeof(ABC).GetTypeInfo().DeclaredConstructors.First();
var abc1 = (ABC) constr.Invoke(new object[0]);
// abc1 now contains an instance of ABC
// the following line throws an exception on .NET Native
// but it works fine on any other .NET runtime
var abc2 = …Run Code Online (Sandbox Code Playgroud) .net ×3
c# ×3
ios ×3
objective-c ×2
.net-native ×1
autolayout ×1
clr ×1
dns ×1
entities ×1
gps ×1
il ×1
iphone ×1
properties ×1
reflection ×1
runtime ×1
translate ×1
windows-8 ×1
xamarin ×1
xaml ×1
xml ×1