ํค๋ณด๋๊ฐ ํญ ํ์ด์ง(position=bottom)์์ ์ด๋ฆฌ๋ฉด ํญ์ด ํค๋ณด๋ ์๋จ์ ๋ํ๋ฉ๋๋ค.
์์๋๋ ๋์์ ํค๋ณด๋๊ฐ ํ์๋ ๋ ํญ์ ์จ๊ธฐ๋ ๊ฒ์ ๋๋ค.
์ฌํ ๋จ๊ณ:
๋์์ ์ ์ดํ ์ ์๋๋ก ํค๋ณด๋๊ฐ ์ด๋ ค ์์ ๋(.keyboard-is-open) CSS ํด๋์ค๋ฅผ ํ์ด์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ Ionic 2์ฉ์ ๋๋ค.
์ฝ๋ฅด๋๋ฐ CLI: 5.2.0
Gulp ๋ฒ์ : CLI ๋ฒ์ 3.9.0
Gulp ๋ก์ปฌ: ๋ก์ปฌ ๋ฒ์ 3.9.1
Ionic Framework ๋ฒ์ : 2.0.0-beta.9
Ionic CLI ๋ฒ์ : 2.0.0-beta.30
Ionic ์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ : 2.0.0-beta.16
์ด์ ์ฒด์ :
๋
ธ๋ ๋ฒ์ : v4.3.2
์, Android๋ฅผ ์ฌ์ฉ ์ค์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. ์ค๋๋ ํค๋ณด๋ ๋ฌธ์ ...
@tlancina์ PhoneGap conf์์ ํค๋ณด๋์ ๋ํ ์ด์ผ๊ธฐ ๋ฅผ ๋ณด์๋๋ฐ ์ผ๋ฐ์ ์ผ๋ก ๊ฝค ์ด๋ ค์ด ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค!
์๋๋ก์ด๋์์๋ ์ ์ฑ์์ ํค๋ณด๋๋ฅผ ์ด๋ฉด ํ๋จ ํญ๋ฐ๊ฐ ์๋ก ์ฌ๋ผ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํจ์ฌ ๋ ๋์ ๊ฒ์ ๋ฐ๋ฅ์ ๊ฐ๊น์ด ์
๋ ฅ ํ๋๋ฅผ ๋ฎ๋ ๊ฒ์
๋๋ค. Tim์ ๊ทธ๊ฒ์ ํผํ๋ ค๊ณ ๋
ธ๋ ฅํด์ผ ํ์ง๋ง ๋ถํํ๋ ๋ด ํ๋ก์ ํธ์์ ํธ์งํ ๊ธด ๋ชฉ๋ก์ด ์๋ค๊ณ ๋งํ์ต๋๋ค.
๋๋ ์ ์ฒด ํค๋ณด๋ ์ฃผ์ ๋ฅผ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๊ทธ๊ฒ์ด ionic์์ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด๊ธฐ ์ํด ์ฐ๊ธฐํ์ต๋๋ค.
๊ฒ๋ค๊ฐ @tlancina , ionic์์ ํค๋ณด๋ ์ฌ์ฉ์ ๋ํ ๋ชจ๋ฒ ์ฌ๋ก ์์ต์๊ฐ
์ ๋ ์ด ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์์ต๋๋ค.
์ฐ๋ฆฌ ํ๋ก์ ํธ์์๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด์ ๋ํ ๊ณํ์ด ์์ต๋๊น?
์ฌ๋ฌ๋ถ๋ ๊ณ ํต์ ๋๋ผ๊ณ ์์ต๋๋ค. ํน์ ์์์ด ์๋์?
๋ํ ์ด ํ๋ฅญํ ๊ธฐ๋ฅ, ํญ ๋ฐ ์จ๊ธธ ์ ์๋ ์ข์ ํค๋๊ฐ ํ์ํ ์๋ ์์ต๋๋ค.
@jgw96 ์ฌ๊ธฐ ์ ํฅ์ ๋ ์ด๋ธ์ ์ถ๊ฐํ ๊ฒ์ ์์์ต๋๋ค. ๊ธฐ๋ณธ ์ฑ์ ๋์ผํ๊ฒ ์๋ํ์ง ์๊ณ (ํค๋ณด๋ ์์ ํญ ์ด๋) ํญ๋ ์ค์ ์ฝํ ์ธ ๊ณต๊ฐ์ ๋ช ์ค๋ก ์ ํํ๋ฏ๋ก ํนํ ์ํ ํด๋ํฐ์์๋ ์ด๊ฒ์ด ๋ ์ฌ๊ฐํ ๋ฌธ์ ๋ก ๊ฐ์ฃผ๋์ด์ผ ํ์ง ์์๊น์?
์์ ํด๊ฒฐ์ฑ ์ ์ฐพ๋ ์ฌ๋๋ค์ ์ํด ๋ด๊ฐ ํ ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
TabsComponent ์์ฑ์:
platform.ready().then(() => {
Keyboard.onKeyboardShow().subscribe(() => {
document.body.classList.add('keyboard-is-open');
});
Keyboard.onKeyboardHide().subscribe(() => {
document.body.classList.remove('keyboard-is-open');
});
});
CSS ๋ด๋ถ:
body.keyboard-is-open ion-tabbar {
display: none;
}
body.keyboard-is-open scroll-content {
margin-bottom: 0 !important;
}
ํ ํ์ด์ง์ ํญ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ ์๋ํ์ง ์์ง๋ง CSS๋ฅผ ์ฌ์ฉํ์ฌ ํญ์ ์ง์ ์ ํํ ์ ์์ต๋๋ค.
ํ์ฌ Ionic ๋ฒ ํ 11์ ์คํ ์ค์ ๋๋ค.
์ด๊ฒ์ ๋ํ ์ด๋ค ์ ๋ฐ์ดํธ?
@bvx89 ๊ฐ์ฌํฉ๋๋ค.
Rc0
์ ์๋ ์ฌ๋๋ค์ ์ํด CSS์ ์ฝ๊ฐ์ ๋ณ๊ฒฝ์ด ์์ต๋๋ค.
body.keyboard-is-open .tabbar {
display: none;
}
body.keyboard-is-open .scroll-content {
margin-bottom: 0 !important;
}
์์ง ๊ณต์์ ์ธ ํด๊ฒฐ์ฑ ์ ์์ง๋ง
Android์์ ์ ์ฒด ํ๋ฉด ๋ชจ๋๋ฅผ ํ์ฑํํ๋ฉด ์ด ๋ฌธ์ ๋ ํด๊ฒฐ๋ฉ๋๋ค.
์ด๊ฒ์ ์ค์ ํ์ฌ ์ํ ํ ์ ์์ต๋๋ค
<preference name="Fullscreen" value="true" />
v5.0.0 ์ด์ ์ Cordova Android ํ๋ซํผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ config.xml์ ์ถ๊ฐํ๊ณ ์ ํ์ ์ผ๋ก cordova-plugin-fullscreen์ ์ถ๊ฐํฉ๋๋ค.
์ด๊ฒ์ ์์ ๋ ๋๋จธ์ง ํค๋ณด๋ ๋ฌธ์ ์ ํจ๊ป ๋ค์ ๋ฒ์ ์์ ์์ ๋ ์์ ์ ๋๊น(๋ค๋ฅธ ์ค๋ ๋์ ํค๋ณด๋ ๋ฌธ์ ์ ๋ํด ์ธ๊ธํ๋ ๊ฒ์ ์ฝ์ผ์ญ์์ค) ๋๋ ์ด๊ฒ์ด ๊ท ์ด ์ฌ์ด์ ๋จ์ด์ก์ต๋๊น?
@RaymondAtivie
๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ค์ ๋ฒ์ ์์ ํด๊ฒฐ๋ ์์ ์ธ๊ฐ์?
RC3์์๋ ์๋ํ์ง ์์ต๋๋ค.
onKeyboardShow()๋ ์คํ๋์ง ์์ต๋๋ค...
+1, ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ฝ๋ฅด๋๋ฐ CLI: 6.3.1
Ionic CLI ๋ฒ์ : 2.1.8
Ionic ์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ : 2.1.4
ios-deploy ๋ฒ์ : ์ค์น๋์ง ์์
ios-sim ๋ฒ์ : ์ค์น๋์ง ์์
์ด์ ์ฒด์ : ์๋์ฐ 8.1
๋
ธ๋ ๋ฒ์ : v6.4.0
Xcode ๋ฒ์ : ์ค์น๋์ง ์์
๋๋ ์ด์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ @RaymondAtivie ๊ฐ ๊ฒ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค. ํญ์ ๋ ์ด์ ํ์๋์ง ์์ง๋ง ์์ชฝ ํ
๋๋ฆฌ๋ ์ฌ์ ํ ํ์๋๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. ๋ค๋ฅธ ์ฌ๋์ด์ด ๋ฌธ์ ๊ฐ ์์ต๋๊น? ๋๋ ์ถ๊ฐ๋ฅผ ์๋ํ๋ค
box-shadow: none;
border-top: none;
๊ทธ๋ฆฌ๊ณ ์ฌ์ ํ ํญ ํ์์ค์์ ๋ณผ ์ ์๋ ๋์ผํ ์๋จ ํ
๋๋ฆฌ๋ก ๋๋ฉ๋๋ค. ์ด๋ค ์์ด๋์ด?
ion-content
์ต์
์ fullscreen="true"
๋ฐ๊ฟ์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
ํญ๋ฐ์ ์จ๊ฒจ์ง ์คํ์ผ ์ค์
var tabbars = document.getElementsByClassName('tabbar');
for(var i=0; i<tabbars.length; i++) {
var node = <HTMLElement>tabbars[i];
node.style.display = hide === true && 'none' || 'block';
}
๋๋ ์ด๊ฒ์ ์๋ํ๊ณ ํญ ํ์์ค์ด false๋ฅผ ํ์ํ๋๋ก ์ค์ ๋์ด ์์ด๋ ์ฌ์ ํ ๋์ผํ ์๋จ ํ ๋๋ฆฌ๊ฐ ํ์๋ฉ๋๋ค.
@payneBrandon ์๋จ ๋ฐ๋ฅผ ์จ๊ธฐ๊ณ ์์ต๋๋ค
<ion-header *ngIf="isShowHeader()">
๋ด ์ด์จ ํญ์ด ๋งจ ์๋์ ์์ผ๋ฏ๋ก ํค๋๋ฅผ ์จ๊ฒจ๋ ํฐ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ๋ด๊ฐ ๋งํ๋ ๋ด์ฉ์ ์คํฌ๋ฆฐ์ท์ ์ฒจ๋ถํ์ต๋๋ค. ํค๋ณด๋๊ฐ ํ์๋๊ณ ํ๋จ์ ํญ์ด ์จ๊ฒจ์ ธ ์์ง๋ง ์คํฌ๋กคํ๋ฉด ์ ์๋ฆฌ์ ์ ์ง๋๋ ์๋จ ๊ฒฝ๊ณ์ ์ด ์๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
์ด ๋ง๋๋ ์์์ ์ผ๋ถ์ฒ๋ผ ๋ณด์
๋๋ค.
html ์ฝ๋๋ฅผ ๊ณต์ ํ ์ ์์ต๋๊น?
๋ง์นจ๋ด ๊ทธ๊ฒ์ ์์ ๋์ต๋๋ค. ๋ด ํญ์ด ๋งจ ์๋์ ์๊ธฐ ๋๋ฌธ์ ๋จธ๋ฆฌ๊ธ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์์ง๋ง ๋ฐ๋ฅ๊ธ์ ๋ณผ ํ์๊ฐ ์์์ต๋๋ค. ๋ณธ๋ฌธ์ keyboard-is-open ํด๋์ค์ BAM์ด ๋ค์ ๋น์ฆ๋์ค์ ์๋ ๊ฒฝ์ฐ ๋ฐ๋ฅ๊ธ์ ์จ๊ธฐ๊ธฐ ์ํด ์กฐ๊ฑด๋ถ ํด๋์ค๋ฅผ ์ ์ฉํ์ต๋๋ค. ๋์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
@payneBrandon ํ์ด์ ๋น๋๋ค
๊ทธ ๊ธฐ๋ฅ๋ ๋ณด๊ณ ์ถ์ต๋๋ค.
๋ํ ion-footer
๋ ํค๋ณด๋ ์ด๊ธฐ/๋ซ๊ธฐ์ ๋ํ ๊ฐ์์ฑ์ ์ง์ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ๊ฐ๋จํ ์์ ์ ํ์ต๋๋ค(๋ฌผ๋ก ์ด์์ ์ด์ง๋ ์์ต๋๋ค). .scroll-content
์๋ margin-bottom
์ 56px
๊ฐ ์๊ณ ๋์ผํ ๋์ด์ ํญ์ด ์์ต๋๋ค. ๋๋ ํค๋ณด๋๋ฅผ ํ์ธํ๋ค:
public keyboardCheck() {
return this.keyboard.isOpen();
}
๊ทธ๋ฐ ๋ค์ ์ด ํด๋์ค๋ฅผ ion-content
, .scroll-content
์ ๋ถ๋ชจ์ ์ฐ๊ฒฐํฉ๋๋ค.
.keyboard-open .scroll-content {
margin-bottom: 0px !important;
}
์ด๊ฒ์ ion-content
์ถ๊ฐํ์ญ์์ค.
<ion-content padding [ngClass]="{'keyboard-open': keyboardCheck()}">
tabs.html
์์ ๋์ผํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ํค๋ณด๋๊ฐ ์ด๋ ค ์์ ๋๋ ํญ์ ์จ๊ฒผ์ต๋๋ค.
<ion-tabs [ngClass]="{'remove-tabs': keyboardCheck()}">
.remove-tabs .tabbar {
display: none;
}
์์ ์ด ํ์ํ ํ์ด์ง์๋ง ์ด ์์ ์ ์ํํ์ต๋๋ค.
iOS์ Android ๋ชจ๋์์ ์๋ํฉ๋๋ค.
ํด๊ฒฐ
์ด๊ฒ์ ํ์๋ CSS๋ฅผ ์ ์ธํ๊ณ ์ ์ ํ ์๋ฃจ์ ์ ๋๋ค.
```
'@angular/core'์์ { ๊ตฌ์ฑ์์ } ๊ฐ์ ธ์ค๊ธฐ;
'ionic-native'์์ {Keyboard} ๊ฐ์ ธ์ค๊ธฐ
'../home/home'์์ { ํํ์ด์ง } ๊ฐ์ ธ์ค๊ธฐ;
'../about/about'์์ { AboutPage } ๊ฐ์ ธ์ค๊ธฐ;
'../contact/contact'์์ { ContactPage } ๊ฐ์ ธ์ค๊ธฐ;
@์์({
templateUrl: 'tabs.html'
})
๋ด๋ณด๋ด๊ธฐ ํด๋์ค TabsPage {
// ์ด๊ฒ์ ํญ ๊ตฌ์ฑ ์์์ ์ด๋ค ํ์ด์ง๋ฅผ ์๋ ค์ค๋๋ค.
// ๊ฐ ํญ์ ๋ฃจํธ ํ์ด์ง์ฌ์ผ ํฉ๋๋ค.
tab1Root: ๋ชจ๋ = ํํ์ด์ง;
tab2Root: ๋ชจ๋ = ์ ๋ณด ํ์ด์ง;
tab3Root: ๋ชจ๋ = ์ฐ๋ฝ์ฒ ํ์ด์ง;
valueforngif=์ฐธ;
์์ฑ์(๊ณต๊ฐ ํค๋ณด๋:ํค๋ณด๋) { }
ionViewDidEnter(){
Keyboard.onKeyboardShow().subscribe(()=>{this.valueforngif=false})
Keyboard.onKeyboardHide().subscribe(()=>{this.valueforngif=true})
}}
this my tabs.html
```
<ion-tabs *ngIf="valueforngif">
<ion-tab [root]="tab1Root" tabTitle="Home" tabIcon="home"></ion-tab>
<ion-tab [root]="tab2Root" tabTitle="About" tabIcon="information-circle" [tabsHideOnSubPages]="true"></ion-tab>
<ion-tab [root]="tab3Root" tabTitle="Contact" tabIcon="contacts"></ion-tab>
</ion-tabs>
๋ฉ์ง @efnan34 , ์์ฑ์์์ ์ ๊ณตํ ํ์๋ ์์ง๋ง.
์ด๋ก ์ธํด ํค๋ณด๋๊ฐ ์ด๋ฆด ๋ ์๋์ผ๋ก ๋ซํ๋๋ค... ํญ์ ์จ๊ธฐ๊ธฐ ์ํด ํฌ์ปค์ค๊ฐ ํญ์ผ๋ก ๋์๊ฐ์ ํค๋ณด๋๊ฐ ๋ซํ๊ธฐ ๋๋ฌธ์ ๋๊น?
ionViewDidEnter(){
Keyboard.onKeyboardShow().subscribe(()=>{this.valueforngif=false})
Keyboard.onKeyboardHide().subscribe(()=>{this.valueforngif=true})
}
@bvx89 ๊ทํ์ ์๋ฃจ์ ์ Ionic 2.1.0๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ์ ์ผํ ์๋ฃจ์ ์ ๋๋ค. ionic-native์ ๋ํด ๊ธฐ๋ก๋ ๋ฒ๊ทธ๊ฐ ์๊ณ ๋ณ๊ฒฝ ์ฌํญ์ด ๊ฐ์ง๋์ง ์์ ๋ค๋ฅธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋ํ์ง ์์์ต๋๋ค. ์ด์ ๋ํ ๊ณต์ ์์ ์ ๊ธฐ๋ํฉ๋๋ค
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค @Killmore
์ด์ ๋ํ ๊ณต์์ ์ธ ํด๊ฒฐ์ฑ
์ ์์ง ์๋์?
์๋
ํ์ธ์
์์ ์๋ฃจ์
์ Ionic 2.1.0์์๋ ์คํ๋์ง๋ง *ngif ๋์ ๋ ๋์ ๊ฒฐ๊ณผ [hidden] attrb๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ด ํ๋ก์ ํธ์์ ์ด ์๋ฃจ์
์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ข์ ํ๋ฃจ ๋์ธ์
์์ ๊ฒฝ์ฐ ์ผ๋ถ Android ์ฅ์น์์ ๊น๋ฐ์์ด ๋ฐ์ํ๋ฉฐ ์ค์ ๋ก๋ ์๋ชป๋ ์ต์ ์ ๋๋ค.
์ด๊ฒ์ ์๋ํฉ๋๋ค .. ์ด๊ฒ์ ์๋ํ์ญ์์ค
var originalHeight = document.documentElement.clientHeight;
var originalWidth = document.documentElement.clientWidth;
$(์ฐฝ).ํฌ๊ธฐ ์กฐ์ (ํจ์() {
// ๊ฐ๋ก/์ธ๋ก ๋ชจ๋ ์ ํ ์ ์ด
if (document.documentElement.clientHeight == originalWidth &&
document.documentElement.clientWidth == originalHeight) {
์๋ณธ ๋์ด = ๋ฌธ์.๋ฌธ์์์.ํด๋ผ์ด์ธํธ ๋์ด;
์๋ณธํญ = ๋ฌธ์.๋ฌธ์์์.ํด๋ผ์ด์ธํธํญ;
}
// ์ฌ์ฉ ๊ฐ๋ฅํ ๋์ด๊ฐ ๋ ์์์ง(ํค๋ณด๋๊ฐ ํ์๋จ) ํ์ธํ์ฌ ๋ฐ๋ฅ๊ธ์ ์จ๊น๋๋ค.
if (document.documentElement.clientHeight < originalHeight) {
$('.๋ฐ๋ฅ๊ธ').hide();
} ๋ ๋ค๋ฅธ {
$('.๋ฐ๋ฅ๊ธ').show();
}
});
์ด๊ฒ์ด ๋ด๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ ๋๋ค.
tab.ts
import { Component, ElementRef, Renderer, ViewChild } from '@angular/core';
import { Events, Tabs } from 'ionic-angular';
import { AboutPage } from '../about/about';
import { ContactPage } from '../contact/contact';
import { HomePage } from '../home/home';
@Component({
templateUrl: 'tabs.html'
})
export class TabsPage {
@ViewChild('myTabs') tabRef: Tabs;
mb: any;
tab1Root = HomePage;
tab2Root = AboutPage;
tab3Root = ContactPage;
constructor(private elementRef: ElementRef, private renderer: Renderer, private event: Events) {
}
ionViewDidLoad() {
let tabs = this.queryElement(this.elementRef.nativeElement, '.tabbar');
this.event.subscribe('hideTabs', () => {
this.renderer.setElementStyle(tabs, 'display', 'none');
let SelectTab = this.tabRef.getSelected()._elementRef.nativeElement;
let content = this.queryElement(SelectTab, '.scroll-content');
this.mb = content.style['margin-bottom'];
this.renderer.setElementStyle(content, 'margin-bottom', '0')
});
this.event.subscribe('showTabs', () => {
this.renderer.setElementStyle(tabs, 'display', '');
let SelectTab = this.tabRef.getSelected()._elementRef.nativeElement;
let content = this.queryElement(SelectTab, '.scroll-content');
this.renderer.setElementStyle(content, 'margin-bottom', this.mb)
})
}
queryElement(elem: HTMLElement, q: string): HTMLElement {
return <HTMLElement>elem.querySelector(q);
}
}
ํน์ ํ์ด์ง.ts
import { Component } from '@angular/core';
import { NavController, Events } from 'ionic-angular';
import { Keyboard } from '@ionic-native/keyboard';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
constructor(public navCtrl: NavController, private event: Events, private keyboard: Keyboard) {
}
ionViewDidLoad() {
this.keyboard.onKeyboardShow().subscribe(() => this.event.publish('hideTabs'));
this.keyboard.onKeyboardHide().subscribe(() => this.event.publish('showTabs'));
}
}
dPary์ ๋ํ ํฌ๋ ๋ง
ํญ์ ์จ๊ธฐ๋ ์ด๋ฌํ ๋ชจ๋ ์๋ฃจ์ ์ผ๋ก ์ธํด ์ฅ์น์์ ๋ณด๊ธฐ๊ฐ ๋ค์ ๋ ๋๋ง๋์ด ๋์ ๋๋ ๊น๋ฐ์์ด ๋ฐ์ํ๊ณ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ถฉ๋์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๋ถ ๋ชจ๋๊ฐ ์ ์ ํ ์ฅ์น ํ ์คํธ๋ฅผ ์ํํ๊ณ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ด์จ๋ ์ต๊ณ ์ ๋๋ค.
์, ์ ๋ @cozzbie ์ ํจ๊ป ์์ต๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ๋จ์ง ์ผ๋ถ ํดํน์ผ ๋ฟ์ ๋๋ค. @ionitron @manucorporat ํ์ ์ค์ ๊ณต์ ์๋ฃจ์ ์ด ํ์ํฉ๋๋ค.
+1 ๊ณต์ ์๋ฃจ์ ์ด ํ์ํฉ๋๋ค. ์ด๋ฌํ ์์ ์ฌํญ ์ค ์ด๋ ๊ฒ๋ ํ๋ก๋์ ์ฉ๋๋ก ์ด์์ ์ด์ง ์์ต๋๋ค.
ํ์ฌ ๋ฒ์ ์ ionic์ ์์ฒด์ ์ผ๋ก ์ํํฉ๋๋ค.
21 Nis 2017 17:12 "Ruben Callewaert" ์๋ฆผ @github.com
์ผ์ฆ๋:
+1 ๊ณต์ ์๋ฃจ์ ์ด ํ์ํฉ๋๋ค. ์ด๋ฌํ ์์ ์ฌํญ ์ค ์ด๋ ๊ฒ๋ ์ด์์ ์ด์ง ์์ต๋๋ค.
์์ฐ ์ฌ์ฉ.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/driftyco/ionic/issues/7047#issuecomment-296201358 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AVskkCpgFZZRbrd56ILc5nIPZICRTclUks5ryLlCgaJpZM4I-H1S
.
์ด๊ฒ ์ ๋ง ์ ๊ฒฝ์จ์ค๊ฑด์ง. ์ฌ์ ํ ํญ๋ฐ๊ฐ ๋ณด์ ๋๋ค. ์ด ์์ฑ ionic-angular 3.2.0์์์ ๊ฐ์ด ์ต์ ๋ฒ์ ์ ์คํํฉ๋๋ค.
2.xx ๋ฒ์ ์์๋ ์ ์๋ํ์ง๋ง ์ด์ 3.xx ๋ฒ์ ์ ํ์ธํ์ต๋๋ค.
๋ญ๊ฐ ์๋ชป๋์์ต๋๋ค. ํ๋ฉด์์ ์ํ๋ ๊ฒ์ ์จ๊ธธ ๋๊น์ง
ํค๋ณด๋๋ก ํ์ดํ .์ํ๊น๊ฒ๋ ๋ค๋ฅธ ์๋ฃจ์
์ ์ฐพ์์ต๋๋ค.
๋ชจ๋ 2.xx์ ๋ํ ur ionic ๋ฒ์
2017๋ 5์ 12์ผ รร 3:32 "vazad28" ์๋ฆผ @github.com yazdฤฑ:
์ด๊ฒ ์ ๋ง ์ ๊ฒฝ์จ์ค๊ฑด์ง. ์ฌ์ ํ ํญ๋ฐ๊ฐ ๋ณด์ ๋๋ค. ์ต์ ์คํ
ionic-angular 3.2.0์ ์์ฑํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฒ์ ์ ๋๋ค.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/driftyco/ionic/issues/7047#issuecomment-300952251 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AVskkNkEdzsMkkrhGW0l9OUW2BKly-PSks5r46ingaJpZM4I-H1S
.
๊ทธ๋ฅ ์ฌ๊ธฐ ์๊ฐ. ์์ ํต์ ์ฌ์ฉํ์ฌ ํญ์ ์จ๊ธฐ๋ฉด ์ฅ์น์์ ๋ณด๊ธฐ๊ฐ ์๋ก ๊ณ ์ณ์ง๋ฏ๋ก ์จ๊ธฐ๋ ๋์ ํญ ์์ญ์ ๋์ด๋ฅผ 0์ผ๋ก ๋ฎ์ถ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ๊ทธ๋ฅ ์๊ฐ์ด์ง๋ง ์ง๊ธ์ ๋๋ฌด ์ฐธ์ฌํ์ฌ ์๋ํฉ๋๋ค.
๊ณต์ ์์ ์ ์ํด +1! " display:none " ์ ๊ทผ ๋ฐฉ์์ ํ์ฉํ ์ ์๋ ๊น๋ฐ์์ ์ผ์ผํค๊ณ ํญ์ด ํ ๋ฒ ๋ ๋๋ง๋ ๋ค์ ์ฌ๋ผ์ง๋๋ค.... ๊ฑฐ์ถ์ฅ์ค๋ฝ๊ณ ํดํคํด ๋ณด์ ๋๋ค. (๋๊ตฐ๊ฐ ๊น๋ฐ์์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น? ์ฌ์ฉ์์๊ฒ ์ข๊ฒ ๋ณด์ด๋ฉด ํดํน ์์ ์์ง ์์ต๋๋ค)
์ด ๋ฌธ์ ์ ๊ด๋ จํ์ฌ ์๋ก์ด ๊ฒ์ด ์์ต๋๊น? ํฌ๋ง์ ์๊ณ UI์ ํ์ง์ ์ํฅ์ ๋ฏธ์น ๋ฌด์ธ๊ฐ๋ฅผ ๊ตฌํํ๊ธฐ ์์ํ๊ธฐ ์ ์ ์ฌ์ ํ ๊ณต์ ์์ ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
@patrickmcd , ์์ง์๊ฐ๋ฝ์ ์ ์, ์ด ์ต๊ด์
@viking2917 ๋ด๊ฐ ์ ์ํ ํดํน์ ์๋ํ๊ณ ํญ ๋์ด๋ฅผ 0์ผ๋ก ๊ฐ์
๋ถํํ๋ CSS๋ก ํญ์ ์จ๊ธฐ๋ฉด ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. Ionic์ ion-content
์ฌ๋ฐฑ๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ๊ฐ์ ๊ณ์ฐํ๊ณ ์จ๊ฒจ์ง ํญ์ ์กด์ฌ๋ฅผ ๊ณ ๋ คํฉ๋๋ค.
๋ค๋ฅธ ๊ตฌ์ฑ ์์์ ํจ๊ป ์ผ๋ถ ์์น ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์๋ฃจ์ ์ ์ ๊ฑฐํด์ผ ํ์ต๋๋ค.
@Khalid-Nowaf ๋๋ Ionic ํ๊ณผ ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ~2000๋ช ์ ๊ด์ฐฐ์๋ค๋ก๋ถํฐ ์๊ฐ์ ๋นผ์๋ ์คํธ ๋๊ธ์ ๊ฐ์ฌํ์ง ์์ต๋๋ค.
@Floyd1256 ๋ ์ ๋๊ธ์ ์ฌ๋ ค๊น์ง ์์ ์คํธ์ ๋๋ค. ๊ทธ๊ฒ์ ๋ํ์ ์๋ฌด๊ฒ๋ ์ถ๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋จ์ง ์ฐ๋ฆฌ์ ๋ฐ์ ํธ์งํจ์ ์ฑ์ฐ๋ ์ญํ ์ ํ๋ ๋ ๋ค๋ฅธ "ํ๋ฌ์ค ์ / ์ฐ๋ฆฌ๊ฐ ์์ง ๊ฑฐ๊ธฐ์ ์์ต๋๊น?" ์ฝ๋ฉํธ์ ๋๋ค.
๋ด downvotes๋ ๋ ์ฌ๋ ค ๊น์ ํ๋์ผ๋ก ๋ค๋ฅธ ์ฌ๋๋ค์ ๋์งํ๋ ค๋ ์๋์ ๋๋ค. ๋๊ธ์ ๋ฌ๊ธฐ ์ ์ ์ฐ๋ฆฌ๋ _์๊ฐ์ด ์์คํ_ ~2000๋ช ์ ์ฌ๋๋ค๊ณผ ๋ํ๋ฅผ ๋๋๊ณ ์์์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด ๊ณต๊ฐ์ ์น๊ตฌ์ ๊ฐ์ธ์ ์ธ IM ์ฑํ ์ฒ๋ผ ๊ฒฝ์ํ๊ฒ ์ทจ๊ธํด์๋ ์ ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ์ ์๊ฒฌ์ด ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋ ๊ฒ์ธ์ง ๋ฐฉํด๊ฐ ๋ ๊ฒ์ธ์ง, ๋ํ๋ฅผ ์ง์ ์ํค๊ฑฐ๋ ๊ทธ์ ๋ ๋ค์ฉํ ๊ฒ์ธ์ง, ์ ๋ง๋ก ๋งํ ํ์๊ฐ ์๋์ง ๋๋ Github ๋ฐ์์ผ๋ก ๋ ์
https://github.com/ionic-team/ionic/tree/keyboard-fixes ์ ํจ๊ป ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ถ๊ธฐ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ์ปค๋ฐ ์ ํนํ โโ๋งค์ฐ ์ ๋งํด ๋ณด์
๋๋ค.
ionic v1 ์ด์ ๊ฐ ์ฉ๊ธฐ๊ฐ ์์ต๋๋ค.
์ด ํจ์น๋ฅผ ๋ง๋ญ๋๋ค(๋๋ ์ด ์ฝค๋ณด๊ฐ ์๋ ์ปจํธ๋กค๋ฌ๊ฐ ํ๋๋ง ์๊ธฐ ๋๋ฌธ์ ์ํฅ์ ๋ฐ๋ ๋ทฐ์ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ฃ์์ต๋๋ค).
/* HACK Al Mostrar el teclado el tabbar se pone encima de el en android /var bottom_stored=0;window.addEventListener('native.keyboardshow', ํจ์(e) {angular.element(document.getElementsByClassName('tab-nav')).addClass('์จ๊ธฐ๊ธฐ');bottom_stored = angular.element(document.getElementsByClassName('has-tabs')).css('๋ฐ๋ฅ');angular.element(document.getElementsByClassName('has-tabs')).css('๋ฐ๋ฅ','0px');$scope.$apply();});window.addEventListener('native.keyboardhide', ํจ์(e) {angular.element(document.getElementsByClassName('tab-nav')).removeClass('์จ๊ธฐ๊ธฐ');angular.element(document.getElementsByClassName('has-tabs')).css('bottom',bottom_stored);$scope.$apply();});/ ํดํน */
์ด๊ฒ์ ์๋ํฉ๋๋ค
์ ๊ฒฝ์ฐ์๋ Android๋ฅผ ์ฌ์ฉํ ๋๋ง ๋ฐ์ํฉ๋๋ค. ๊ฐ์ฅ ์ข์ ํด๊ฒฐ์ฑ ์ config.xml์์ android ํ๊ทธ์ ์์ฑ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ค.
<platform name="android">
<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application/activity">
<activity android:windowSoftInputMode="adjustPan" />
</edit-config>
๋ค์ ์ค์ ๊ฐ๋จํ ์ถ๊ฐํ๋ฉด AndroidManifest.xml์ Android ๋น๋๊ฐ android:windowSoftInputMode์ adjustPan ์ด ์์ผ๋ฏ๋ก ํค๋ณด๋๊ฐ ํ๋ฉด์ ์๋ก ๋ฐ์ด ์ฌ๋ฆฌ๋ ๋์ ๋ชจ๋ ์ฝํ ์ธ ๋ฅผ ์ค๋ฒ๋ ์ดํ๊ฒ ๋ฉ๋๋ค.
์์์ ์ค๋ช ํ @Jatapiaro ์ ์ ๊ทผ ๋ฐฉ์์ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋ฅด๋๋ฐ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ์ต๋๋ค.
cordova plugin add cordova-custom-config
๊ทธ๋ฐ ๋ค์ config.xml์ ๋ค์์ ์ถ๊ฐํ์ต๋๋ค.
<platform name="android">
<preference name="android-manifest/application/activity/<strong i="10">@android</strong>:windowSoftInputMode" value="adjustPan" />
...
</platform>
Android ๋ฐ iOS์์ ์์
๋ค์์ ํค๋ณด๋๋ฅผ ๋์ ์ผ๋ก ์จ๊ธฐ๊ธฐ ์ํด ์ํํ ์์ ์ ๋๋ค.
๋ด TS ํ์ผ์์:
@ViewChild('foot') foo_ter: ElementRef;
constructor(private platform: Platform, private keyboard: Keyboard) {
this.platform.ready().then(() => {
this.keyboard.onKeyboardShow().subscribe(() => {
this.foo_ter.nativeElement.hidden = true;
});
this.keyboard.onKeyboardHide().subscribe(() => {
this.foo_ter.nativeElement.hidden = false;
});
});
}
๊ทธ๋ฐ ๋ค์ ๋ด HTML ํ์ผ์์ ์์ TS์์ ๋ค์๊ณผ ๊ฐ์ด ์ฐธ์กฐํ๋ #footer ๋ผ๋ ํ ํ๋ฆฟ ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค.
<ion-footer no-border style="padding:5%;" #footer>
<ion-item no-lines>
Don't have an account?
<button ion-button style="text-align:center;" bold item-end clear no-lines clear (click)="signup()">
Sign Up
</button>
</ion-item>
</ion-footer>
๋๋ ๊ทธ๊ฒ์ด ๋น์ ์๊ฒ๋ ํจ๊ณผ๊ฐ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค :-) @RaymondAtivie
Ionic V3์์ ์ด๋ ๊ฒ ์ฃผ์์ต๋๋ค. ์๋ฒฝํ๊ฒ ์ ์๋ํฉ๋๋ค.
TS ํ์ผ
ionViewDidEnter() {
if (this.keyboard.isOpen())
this.showTabs = ๊ฑฐ์ง;
๋ ๋ค๋ฅธ
this.showTabs = ์ฌ์ค;
}
HTML ํ์ผ
๋ค์ค๋ค
asd
์ ๋ต์ด ์๋๋ค
์ด์ ๋ํ ๊ณต์ ์๋ฃจ์ ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
์ค๋๋ถํฐ.. Ionic v๋ก
@ionic-native/keyboard๊ฐ ์๋ํ๋๋ก ํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ง์ ์ฌ๋๋ค์ด ๋งํ๋ฏ์ด .. onKeyboardShow() ์ด๋ฒคํธ๋ ์ ๋๋ก ๋ฐ์ํ์ง ์์ต๋๋ค.
๋ํ cordova-keyboard-plugin๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
๊ทธ๋์ ๋๋ฅผ ์ํด ์ผํ ๊ฒ์ ...
cordova plugin add cordova-plugin-ionic-keyboard --save
์ด๊ฒ์ ๊ฒ์ํ์ญ์์ค .. readme์ ์ค๋ช
๋๋๋ก window.addEventListener๋ฅผ
ํญ ํ์ด์ง๋ฅผ ๋ ๋ฌ๋ค๊ฐ ๋ค์ ๋์์ฌ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค.
````ํ์ดํ์คํฌ๋ฆฝํธ
// MyTabs.ts
์ผ ๋ฆฌ์ค๋() {
console.log('ํค๋ณด๋ ํ์');
document.body.classList.add('ํค๋ณด๋๊ฐ ์ด๋ ค ์์');
}
์จ๊น ๋ฆฌ์ค๋() {
console.log('ํค๋ณด๋ ์จ๊น');
document.body.classList.remove('ํค๋ณด๋๊ฐ ์ด๋ ค ์์');
}
ionViewDidEnter() {
window.addEventListener('keyboardWillShow', this.showListener);
window.addEventListener('keyboardDidHide', this.hideListener);
}
ionViewWillLeave() {
window.removeEventListener('keyboardWillShow', this.showListener);
window.removeEventListener('keyboardDidHide', this.hideListener);
}
````
์ฒ์์๋ ๋๋ฅผ ์ํด ์ผํ์ต๋๋ค. ํค๋ณด๋๊ฐ ํ์๋ ๋ ์ ๋ ฅ์ ์ฒ์ ํด๋ฆญํ๋ฉด ํญ ํ์์ค์ด ์จ๊ฒจ์ ธ ์์ต๋๋ค. ๋ค๋ฅธ ์ ๋ ฅ์ ํด๋ฆญํ๋ฉด ํญ ํ์์ค์ด ๋ค์ ํ์๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ ๊ฒฝ์ฐ์๋ ์ฒ์์ ์ ๋ ฅ ํ๋๋ฅผ ํด๋ฆญํ ๋๋ง ํญ ํ์์ค์ด ์จ๊ฒจ์ก์ต๋๋ค.
์ด๋ ํ ์ ์? @dharapvj
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ํญ ํ์์ค์ "์จ๊ธฐ๊ธฐ"์ ๊ฐ์ง๋ ์์ง๋ง ์ด ์๋ฃจ์ ์ ํค๋ณด๋๊ฐ ํญ ํ์์ค์ ๋๋ฅด๋ ๋์ ํญ ํ์์ค์ ๊ฐ๋ฆด ์ ์๊ฒ ํ์ฌ ์ ์๊ฒ ํจ๊ณผ์ ์ด์์ต๋๋ค.
๊ธฐ๋ณธ config.xml์์ ๋ค์์ ํฌํจํ๋๋ก Android ํ๋ซํผ์ ํธ์งํฉ๋๋ค.
<platform name="android">
...
<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application/activity">
<activity android:windowSoftInputMode="adjustPan" />
</edit-config>
</platform>
์ด๊ฒ์ด ํ๋ ์ผ์ Cordova๊ฐ AndroidManifest.xml์ ์ฐ๋ ๊ธฐ๋ณธ๊ฐ์ ์์ ํ์ฌ ์ฑ์ ์ ์ญ ํค๋ณด๋ ์ ๋ ฅ ๋์์ ์ ์ดํ๋ โโ๊ฒ์ ๋๋ค.
...๊ทธ๋ฆฌ๊ณ ๋ค์ ๋น๋์์ AndroidManifest.xml์ ํ์ธํ๋ฉด android:windowSoftInputMode= "
@codymbeardsley ์ ๋ง ๊ฐ์ฌํฉ๋๋ค! ์ด ์๋ฃจ์ ์ ์ ์๊ฒ ํจ๊ณผ์ ์ ๋๋ค. ์ ์ด๋ ์๋๋ก์ด๋์ ๊ฒฝ์ฐ ์ข์ ์๋ฃจ์ ์ ๋๋ค. ํค๋ณด๋๊ฐ ์ด๋ ค ์์ ๋ ๋๊ตฌ ๋ชจ์ ์ ๋ฐ๋ฅ๊ธ์ ์จ๊น๋๋ค !
์๋ฒฝํ๊ฒ ์๋ํฉ๋๋ค!
@codymbeardsley ๊ฐ์ฌํฉ๋๋ค
๋ฌธ์ ๋ฅผ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ด ๋ฌธ์ ๋ ์๋ ๋ฌธ์ ์ ๊ด๋ จ์ด ์๋ ๋๊ธ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ๊ฒจ ์์ต๋๋ค. ์ด๊ฒ์ด ์ฌ์ ํ ์ต์ ๋ฒ์ ์ Ionic์์ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒฝ์ฐ ์ ๋ฌธ์ ๋ฅผ ๋ง๋ค๊ณ ํ ํ๋ฆฟ์ด ์์ ํ ์ฑ์์ก๋์ง ํ์ธํ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์์์ ์ค๋ช ํ @Jatapiaro ์ ์ ๊ทผ ๋ฐฉ์์ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋ฅด๋๋ฐ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ์ต๋๋ค.
cordova plugin add cordova-custom-config
๊ทธ๋ฐ ๋ค์ config.xml์ ๋ค์์ ์ถ๊ฐํ์ต๋๋ค.
Android ๋ฐ iOS์์ ์์